一、SQL的分类
1、DDL:数据定义语言
2、DML:数据操作语言
3、DCL:数据控制语言
4、DQL:数据查询语言(从DML中抽取出来的)
二、DDL
(一)操作数据库
1、创建数据库查看所有数据库名称:
1 | CREATE DATABASE [IF NOT EXISTS] mydb1; |
2、切换数据库:
1 | USE mydb1, -- 切换到mydb1数据库; |
3、查看所有数据库名称:
1 | SHOW DATABASES; |
4、删除数据库
1 | DROP DATABASE [IF EXISTS] mydb1; |
5、修改数据库编码
1 | ALTER DATABASE mydb1 CHARACTER SET utf8 |
(二)操作表
1、创建表
1 | CREATE TABLE stu( |
2、查看当前数据库中所有表名称
1 | SHOW TABLES; |
3、查看指定表的创建语句
1 | SHOW CREATE TABLE emp -- 查看emp表的创建语句; |
4、查看表结构
1 | DESC emp -- 查看emp表结构; |
5、删除表
1 | DROP TABLE emp -- 删除emp表; |
6、修改表
1 | 1.修改之添加列:给stu表添加classname列: |
三、DML
1、插入数据
1 | INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male'); |
2、修改数据
1 | UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’; |
3、删除数据
1 | DELETE FROM stu WHERE sid=’s_1001’003B |
4、查询数据(在后面有详细总结)
四、DCL
1、创建用户
1 | CREATE USER 用户名@地址 IDENTIFIED BY '密码'; |
2、给用户授权
1 | GRANT 权限1, … , 权限n ON 数据库.* TO 用户名 |
3、查看用户权限
1 | SHOW GRANTS FOR 用户名 |
4、撤销授权
1 | REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名 |
5、删除用户
1 | DROP USER 用户名 |
6、修改用户密码
1 | USE mysql; |
五、DQL
(一)数据查询语法
1 | SELECT selection_list /*要查询的列名称*/ |
(二)常见查询方式
1、基础查询
1 | SELECT * FROM stu; -- 查询所有列 |
2、条件查询
1 | 条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字: |
1 | /*查询性别为女,并且年龄50的记录*/ |
3、模糊查询
1 | /*查询姓名以“z”开头的学生记录*/ |
4、字段控制查询
1 | /*去除重复记录*/ |
5、排序
1 | /*查询所有学生记录,按年龄降序排序*/ |
6、聚合函数
1 | 聚合函数是用来做纵向运算的函数: |
1 | /*查询emp表中月薪大于2500的人数*/ |
7、分组查询
1 | /*查询每个部门的部门编号以及每个部门的人数*/ |
8、LIMIT
1 | -- LIMIT用来限定查询结果的起始行,以及总行数。 |
(三)多表查询
1、合并结果集
1 | 作用:合并结果集就是把两个select语句的查询结果合并到一起! |
1 | SELECT * FROM cd |
2、内连接
1 | -- 特殊用法(不建议使用) |
3、外连接(左连接、右连接)
外连接的特点:查询出的结果存在不满足条件的可能。
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
1 | -- 左外连接 |
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。
1 | -- 右外连接 |
1 | -- 全外连接(mysql不支持全外连接,但是我们可以使用合并结果集来达到同样的效果),了解即可 |
4、自然连接
两张连接的表中名称和类型完成一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!
1 | -- 自然连接(可读性较差,不建议使用) |
1 | -- 自然连接其他的查找条件的方式 |
5、子查询
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
子查询出现的位置:
where后,作为条件的一部分;
from后,作为被查询的一条表;
1 | /* 找出本公司工资最高的员工信息 */ -- 单行单列 |
六、完整性约束
1、主键约束
当某一列添加了主键约束后,具有以下特点:
a. 非空
b. 唯一
c. 被其他表引用
1 | /*创建表:定义列时指定主键*/ |
2、主键自增长
MySQL提供了主键自动增长的功能!这样用户就不用再为是否有主键,是否重复而烦恼了。当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大主键值+1,也就不会出现重复主键的可能了。
1 | /*创建表时设置主键自增长(主键必须是整型才可以自增长)*/ |
3、非空约束
指定非空约束的列不能没有值,也就是说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为NULL。
1 | 指定非空约束: |
4、唯一
还可以为字段指定唯一约束!当为字段指定唯一约束后,那么字段的值必须是唯一的。这一点与主键相似!
1 | CREATE TABLE tab_ab( |
5、外键约束
主外键是构成表与表关联的唯一途径!
外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。
1 | /*创建t_user表,指定uid为主键列*/ |
1 | /*修改t_section表,指定u_id为相对t_user表的uid列的外键*/ |
七、编码相关命令
1 | 1、查看MySQL编码 |