目录
SQL
SQL-DDL
操作数据库
查询(show)(select)
创建(create)
删除(drop)
操作表
查询当前数据库所有表
修改表
删除
SQL-DML
添加数据(可以批量添加)
SQL-DQL
创建表和插入数据:
条件查询:
聚合函数:
分组查询:
排序查询:
分页查询:
SQL-DCL
函数
字符串函数
数值函数
日期函数
流程函数
约束
多表查询
内连接
外连接
自连接
联合查询
子查询
事务
并发事务问题
MYSQL 的图形化界面工具之一——DateGrip
SQL 是具有数据操纵和数据定义等多种功能的数据库语言,是用于访问和处理数据库的标准的计算机语言。
SQL包括了所有对数据库的操作,主要是由4个部分组成:
- 数据定义:又称为“DDL语言”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
- 数据操纵:又称为“DML语言”,包括插入、删除和更新三种操作。
- 数据查询:又称为“DQL语言”,包括数据查询操作。
- 数据控制:又称为“DCL语言”,对用户访问数据的控制有基本表和视图的授权及回收。
- 事务控制:又称为“TCL语言”,包括事务的提交与回滚。
- 嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
SQL
SQL-DDL
操作数据库
-
查询(show)(select)
show databases;
select database();
注意第二条语句后面有括号。
-
创建(create)
create database[if not exists]数据库名[default charset字符集][collate 排序规则];
其中字符集一般使用 utf8,也可以省略。
-
删除(drop)
drop database[if exists]数据库名;
- 使用
use 数据库名;
操作表
-
查询当前数据库所有表
show tables;
- 查询表结构
desc 表名;
- 查询指定表的建表语句
show create table 表名;
修改表
- 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释][约束];
- 修改
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名
alter table 表名 change 旧字段名 新字段名[comment 注释][约束];
删除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
-
删除
删除表
drop table[if exists]表名;
删除表,并重新创建该表
truncate table 表名;
SQL-DML
DML 是对数据库中比表的数据记录增删查改操作。
- 插入数据是,指定字符顺序是一一对应的
- 包含字符串和日期型数据
-
添加数据(可以批量添加)
insert into 表名(字段1,字段2,...)values(值1,值2);
insert into 表名 value(值1,值2);
- 修改数据
update 表名 set 字段名=值1, 字段名2=值2,...[where 条件];
- 删除数据
delete from 表名[where 条件];
SQL-DQL
DQL 是数据库的查询语言。
创建表和插入数据:
create table employee (
id int comment '编号',
workno varchar(10)comment '工号',
name varchar(10) comment '姓名',
gender varchar(10) comment '性别',
age tinyint unsigned comment'年龄',
idcard char(18) comment '身份证号',
workaddress varchar(10) comment '工作地址',
entrydate date comment '入职时间'
);
insert into employee(id,workno,name,gender,age,idcard,workaddress,entrydate)
values
(1,'1','李华','男',52,'74105209632','天津','2007-7-23'),
(2,'2','张无忌','男',18,'74705209632','上海','2000-5-3'),
(3,'3','韦一笑','男',36,'77105209932','西安','2007-12-5'),
(4,'4','赵敏','女',40,'34105907612','天津','2010-4-6'),
(5,'5','小昭','女',18,'74455934612','天津','2007-4-26'),
(6,'6','杨逍','男',40,'74108909610','北京','2008-7-19'),
(7,'7','陈友','男',65,'74175903612','北京','2002-9-8'),
(8,'8','范瑶','女',40,'44105909712','北京','2007-9-8'),
(9,'9','范凉凉','女',75,'23105905612','重庆','2001-3-2'),
(10,'10','张三丰','女',26,'23105905612','上海','1997-10-15'),
(11,'11','周芷若','女',45,null,'北京','2003-11-8');
条件查询:
#查询指定字段
select name,workno,age from employee;
#查询员工的年龄,起别名(as可以省),不重复
select distinct age as'年龄'from employee;
#查询年龄大于等于20小于等于50的员工(也可以用&&代替and)
#不等于用! 或者<>表示
select age from employee where age>=20 and age<=50;
select age from employee where age between 20 and 50;
#查询没有身份证号的员工
select * from employee where idcard is null;
#查询年龄等于18或者等于40的员工
select * from employee where age = 18 or age=40;
select * from employee where age in(18,40);
#查询名字为两个字的员工
select * from employee where name like'__';
#查询身份证最后一位是0的员工
select * from employee where idcard like '%0';
聚合函数:
#统计数量(*可以替换为具体的,例如name等),但是对于null是不参与聚合函数的计算的
select count(*) from employee ;
#统计最大年龄(最小用min())(统计年龄之和用sum())(平均值用avg())
select max(age)from employee;
分组查询:
#根据性别分组,统计男员工和女员工的平均年龄
select gender,avg(age) from employee group by gender;
#查询年龄小于45的员工并根据工作地址分组,然后获得员工人数大于等于2的组
select workaddress,count(*) from employee where age<45 group by workaddress having count(*)>=2;
排序查询:
#对入职时间升序排序(默认是升序),降序用desc
select * from employee order by entrydate asc ;
#根据年龄对员工升序,年龄相同按照入职时间降序排序
select * from employee order by age,entrydate desc ;
分页查询:
#分页查询(前面一句是0-7)后面一句是(8-15)
select * from employee limit 0,8;
select * from employee limit 8,8;
SQL-DCL
DLC 是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句。
主机可以用%通配。
函数
字符串函数
数值函数
日期函数
流程函数
#返回Ok
select if (true,'Ok','False');
#如果第一个值为null就返回第一个值,不为null就返回第二个值
select ifnull(null,'Default');
#查询员工的工作地址,北京上海的显示未一线城市,其他显示为二线城市
select name,
(case workaddress when '北京' then'一线城市' when'上海' then'一线城市' else '二线城市' end)as '工作地址'from employee;
约束
外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。
存在外键后,删除更新行为:(添加在建立外键约束的后面)
多表查询
为表起了别名,在该条语句就不能直接用表名来约束字段。
内连接
内连接查询的时两表交集的部分。
隐式:去掉笛卡尔积中的无效组合:在表名后加约束条件(where)
外连接
分为右外连接和左外连接:
右向外连接,如果右表的某行在左表中没有匹配行,则将为左表返回空值;如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
自连接
自连接要起别名。
联合查询
使用 all 字段可能会有查询的结果重复,去掉 all 字段后不会有重复的结果。
多张表的列数必须一致,字段类型也要一致。
子查询
标量子查询:总是使用圆括号把结果括起来,返回的结果是单行单列的数据,就是一个值。
列子查询:返回的是单行多列的数据,就是一条记录。
行子查询:返回的结果是一行,可以是多列。
表子查询:返回的结果是多行多列。
事务
是一组操作的集合,不可分割的工作单位,把所有的操作作为一个整体,一起提交或撤销的操作。
例如银行的转账和收款,只能一起操作。
开始事务,提交事务,回滚事务
分别对应:
start transaction;
commit;
rollback;