SQL 的概念
1、什么是 SQL
Structured Query Language 结构化查询语⾔
2 、SQL 作⽤
1. 是⼀种所有关系型数据库的查询规范,不同的数据库都⽀持。
2. 通⽤的数据库操作语⾔,可以⽤在不同的数据库中。
3. 不同的数据库 SQL 语句有⼀些区别 -- 称为“⽅⾔”。
3 、SQL 语句分类
1. Data Definition Language (DDL 数据定义语⾔), 如:建库,建表
2. Data Manipulation Language(DML 数据操纵语⾔),如:对表中的记录操作增删改
3. Data Query Language(DQL 数据查询语⾔),如:对表中的查询操作
4. Data Control Language(DCL 数据控制语⾔),如:对⽤户权限的设置
4、 MySQL 的语法
1. 每条语句以分号结尾。 2. SQL 中不区分⼤⼩写,关键字中认为⼤写和⼩写是⼀样的
注释的语法 说明
-- 注释内容 单⾏注释(--后必须加空格)
/* 注释内容 */ 多⾏注释
# 注释内容 这是MySQL特有的注释⽅式
DDL操作:
-- 查看当前所有数据库
Show databases;
-- 创建数据库
create database java2106;
-- mysql独特写法
create database if not exists java2106;
-- 使用数据库 / 切换数据库(要操作哪个数据库)
use java2106;
use test;
-- 删除数据库
-- drop database test;
drop database if exists test;
-- 改变数据库字符集
alter DATABASE java2106 default charset=utf8;
-- select 全局函数()
select now();
/*操作table, 前提必须切换数据库 use xxx;
1.创建
2.删除
3.修改
数据类型:
1.字符/字符串: varchar(10)-最大10个字符 char(10)-固定10个字符
2.整数: int(2)[mysql] number(2)[oracle]
3.小数: double(3,1)-[mysql]最大值99.9 number(3,1)[oracle]
4.时间: 年月日date 时分秒timestamp 年月日时分秒datetime
*/
-- 1.创建表 - 确定字段名(列), 确定字段类型
-- 表名全称: java2106.user
create table if not exists `user` (
name varchar(20) comment '姓名', -- varchar(20)指的是长度最大20, comment指代字段说明
age int(2),
gender char(1),
score double(3,1) comment '个人综合评分',
birthday datetime
);
-- 2.查看表结构
desc user;
-- 3.查看所有的表
show tables;
-- 4.显示创建user表的sql语句
show create table user;
-- 5.创建一张和user相同的表
create table user1 like user;
desc user;
-- 6.修改表 alter
-- 6.1 添加新的字段 add
alter table user add (no int(2));
-- 6.2 修改原先字段的类型 modify
alter table user modify name varchar(10);
-- 6.3 删除字段 drop
alter table user drop no;
-- 6.4 修改字段名 change
alter table user change gender sex char(1);
-- 7.重命名表
rename table user to user2;
-- 8.删除表
drop table user2;
DML 操作:
-- 1.向表中添加数据
insert into user1 values('张三', 23, '男', 78.9, '2021-07-13 13:23:45'); -- 值的顺序和字段顺序要一致
insert into user1 values('张三', 23, '男', 78.9, now());
insert into user1 values('张三', null, '男', 78.9, null);
-- values值的个数和顺序必须跟前面括号中的字段顺序一致
insert into user1(name, score, gender) values('张三', 78.9, '男');
-- mysql可以一次性添加多个记录
insert into user1 values('lucy', null, '男', 78.9, null),
('tom', 18, '男', 78.9, null),
('jack', 23, '男', 78.9, null),
('rose', 45, '女', 78.9, null),
('david', 32, '男', 78.9, null);
-- 2.修改数据
update user1 set name = 'jerry'; -- 修改所有数据
update user1 set name = 'jerry' where name='张三'; -- name=张三的才要修改(条件)
update user1 set age = 19, birthday=now() where name='lucy';
-- 3.删除数据
delete from user1 ; -- 删除全部记录
delete from user1 where name='jerry';
truncate user1; -- 删除全部
-- Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
SET SQL_SAFE_UPDATES = 0;
DQL操作:
-- 单表查询 select
-- 查询全部
select * from emp; -- * 在执行时会解析成字段名,消耗资源
-- 查询指定字段
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
select empno,ename from emp;
-- 查询的字段可以直接计算, 字段起别名[as]
select ename, sal*12 as salary from emp;
select ename, sal*12 salary from emp;
-- 查询的字段可以使用函数来操作
-- 函数: 数字相关, 字符串相关, 时间相关
select ename, date_format(hiredate, '%Y年%m月%d日') from emp;
SELECT DATE_FORMAT(now(), '%Y年%m月%d日');
-- 条件查询: 筛选 where
-- 查询薪资范围 > < >= <= = !=[<>]
select ename, sal from emp
where sal > 2000;
select ename, sal from emp
where sal <> 3000;
-- 条件 并且:and 或者:or
select ename, sal from emp where sal > 2000 and sal < 3000;
select ename, sal from emp where sal < 2000 or sal > 3000;
-- sal>=2000 and sal<=3000
select ename, sal from emp where sal between 2000 and 3000;
-- null 表示无穷大或者无穷小, 不能判断范围, 也不能计算
-- is null - 是null值 is not null - 不是null值
select ename from emp where mgr is null;
-- 名字长度>4的人 - 函数结果可以作为条件
select ename from emp where length(ename) > 5;
-- 名字是 SMITH 的人
select ename from emp where ename = 'SMITH';
-- 首字母是 S 的人 like-模糊查询
-- %(任意字符任意长度) _(一个任意字符)
select ename from emp where ename like 'S%';
select ename from emp where ename like '_A%';
select ename from emp where ename like '%A%';
-- ESCAPE '*' 转义
SELECT ENAME FROM EMP WHERE ENAME LIKE 'A*_SMITH' ESCAPE '*';
-- sal > 2000,3000,4000中的任意一个值
select ename, sal from emp where sal > any(2000,3000,4000);
-- sal > 2000,3000,4000中的每一个值
select ename, sal from emp where sal > every(2000,3000,4000);