SQL语句的分类
(1)DDL:Data Define Language 定义数据 CREATE/DROP/ALERT(修改)/TRUNCATE(截断) (2)DML:Data Manipulate Language 操作数据 INSERT/UPDATE/DELETE (3)DQL:Data Query Language 查询数据 SELECT (4)DCL:Data Control Language 控制用户权限 GRANT(授权)/REVOKE(收权) |
1.列约束 constraint约束
MySQL可以对插入的数据进行特定的验证,只有满足条件才会允许插入到数据表中,否则被认为非法的数据,禁止插入。
在MySQL中一共提供了6种列约束
(1)主键约束 –PRIMARY KEY
声明了主键列上的值不能重复,表中查询的记录会按照主键上的值由小到大进行排序。
注意:一个表中只能有一个主键;通常设置在编号上。
(2)唯一约束 —UNIQUE
声明了唯一约束的列不能插入重复的值,但允许插入NULL值,而且允许插入多个NULL值。
(3)默认值约束 —DEFAULT
可以使用默认值DEFAULT来为指定的列设置默认值;
使用方法:
INSERT INTO user VALUES(1,'Tom',DEFAULT);
INSERT INTO user (uid,uname) VALUES(2,'Jerry');
(4)非空约束 —NOT NULL
所插入的值不允许为空
(5)检查约束—CHECK
检查约束是对输入的数据范围进行检验
CREATE TABLE student(
age TINYINT CHECK(age>=0 AND age<=100)
);
注意:MySQL不支持检查约束
(6)外键约束—FOREIGN KEY
声明了外键的列,取值必须在另一个表的主键列上出现过。
允许使用NULL作为外键的值
foreign key (列名称)references 另一个表(主键)
2.MySQL的自增列
AUTO_INCREMENT:自动增长,如果设置一个列为自增列,无需手动赋值,赋值为NULL,就会获得当前的最大值,新纪录在当前基础上+1。
注意:只适用于整数型的主键上
3.项目中如何存储时间
DATE #2018-08-03
03/08/2018 08/03/2018 2018年08月03日
将来存储时间列类型 BIGINT
4.简单查询
1)只查询特定列
例:查询员工姓名,工资,生日 SELECT ename,salary,birthday FROM emp;
2)查询所有列
SELECT * FROM emp;
3)给列取别名
例:查询员工的姓名,生日,收入,取别名
SELECT ename AS 姓名,birthday AS 生日,salary AS 收入 FROM emp;
SELECT ename 姓名,birthday 生日,salary 收入 FROM emp;
4)只显示不同的记录
例:查询哪些部门编号下有员工
SELECT DISTINCT deptId FROM emp;
5)在查询时执行计算
例:查询出所有员工的姓名和年薪
SELECT ename 姓名,salary*12 年薪FROM emp;
例:假设每个员工的工资+500,年终每个人再给5000的年终奖,查询每个员工年收入
SELECT ename 姓名,(salary+500)*12+5000 年收入 FROM emp;
6)查询结果集的排序
例:查询所有员工,结果按照工资由低到高
SELECT * FROM emp ORDER BY salary ASC; #ascendant 升序
例:查询所有员工,结果按照工资由高到低
SELECT * FROM emp ORDER BY salary DESC; #descendant 降序
说明:排序默认按照升序排列。
例:查询所有员工,结果按年龄从大到小排
SELECT * FROM emp ORDER BY birthday ASC; #出生日期升序排列
例:查询所有员工,结果集按照姓名排序
SELECT * FROM emp ORDER BY ename ASC;
例:查询所有员工,按照生日由小到大排序,如果生日相同,再按名字由小到大排序
SELECT * FROM emp ORDER BY birthday ASC,ename ASC;
例:查询所有员工,按照工资由小到大,如果工资相同,女员工显示在男员工的前面。
SELECT * FROM emp ORDER BY salary ASC,sex ASC;
7)条件查询
例:查询出编号为5的员工所有信息
SELECT * FROM emp WHERE eid=5;
例:查询出姓名为KING的员工的编号、工资、生日
SELECT eid,salary,birthday FROM emp WHERE ename='King';
例:查询出所有的男员工信息
SELECT * FROM emp WHERE sex='1';
例:查询出工资大于等于5000的员工的所有信息
SELECT * FROM emp WHERE salary>=5000;
练习:查询出1991-1-1之后出生的员工信息
SELECT * FROM emp WHERE birthday>'1991-1-1';
> >= < <= = != |
练习:查询出不在10号部门的所有员工信息
SELECT * FROM emp WHERE deptId!=10;
练习:查询出暂时没有部门的员工信息
SELECT * FROM emp WHERE deptId IS NULL;
注意:NULL和任何值都不能进行相等/不等判定,可以使用IS NULL和IS NOT NULL |
练习:查询出工资大于6000的女员工所有信息
SELECT * FROM emp WHERE salary>6000 AND sex='0';
练习:查询出工资在5000-5999之间的员工信息
SELECT * FROM emp WHERE salary>=5000 AND salary<=5999;
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 5999;
练习:查询出工资小于4000和大于8000的员工信息
SELECT * FROM emp WHERE salary<4000 OR salary>8000;
AND 并且 两个都要满足 |
OR 或者 两个满足其一 |
练习:查询出在1991年出生的员工信息
SELECT * FROM emp WHERE birthday BETWEEN '1991-1-1' AND '1991-12-31';
练习:查询出在1990年前和1993后出生的员工信息
SELECT * FROM emp WHERE birthday <'1990-1-1' OR birthday >'1993-12-31';
练习:查询出在10号和30号部门的员工信息
SELECT * FROM emp WHERE deptId='10' OR deptId='30';
SELECT * FROM emp WHERE deptId IN(10,30);
练习:查询出在10,30,50,80号部门的员工信息
SELECT * FROM emp WHERE deptId='10' OR deptId='30' OR deptId='50' OR deptId='80';
SELECT * FROM emp WHERE deptId IN(10,30,50,80);
练习:查询出不在10和30号部门的员工信息
SELECT * FROM emp WHERE deptId!='10' AND deptId!='30';
SELECT * FROM emp WHERE deptId NOT IN(10,30);
8)模糊条件查询
例:查询出姓名中含有字母E的员工信息
SELECT * FROM emp WHERE ename LIKE '%E%';
练习:查询出姓名以E结尾的员工所有信息
SELECT * FROM emp WHERE ename LIKE '%E';
练习:查询出姓名中倒数第二个字符是E的员工所有信息
SELECT * FROM emp WHERE ename LIKE '%E_';
SQL中提供了两个模糊查询的匹配符 % 可以匹配任意多个字符 >=0 _ 可以匹配任意一个字符 =1 上述两个符号不能和=连用,只能用LIKE连用 |
9)分页查询
查询出所有的男员工,对查询的结果集按照工资升序排序。
SELECT * FROM emp WHERE sex=1 ORDER BY salary ASC;
分页显示:查询的结果集记录太多,一次显示不完,可以一页一页的显示。分页查询语句在不同的数据库中实现方法不一样,MySQL是最简单的。
SELECT * FROM emp LIMIT start,count;
start:从结果集中开始读取的值
count:指定读取的最多行数
第一页:SELECT * FROM emp LIMIT 0,5; #(页码-1)*每页数量
第二页:SELECT * FROM emp LIMIT 5,5;
第三页:SELECT * FROM emp LIMIT 10,5;
.......
第N页:SELECT * FROM emp LIMIT 5(N-1),5;
练习:
分页查询所有员工信息,假设每页最多显示6条记录,写出查询前4页的SQL语句
第一页:SELECT * FROM emp LIMIT 0,6;
第二页:SELECT * FROM emp LIMIT 6,6;
第三页:SELECT * FROM emp LIMIT 12,6;
第四页:SELECT * FROM emp LIMIT 18,6;
注意:limit后边的两个值不能添加引号