MySQL day03

                                                                                                                                                                                                          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后边的两个值不能添加引号

 

猜你喜欢

转载自blog.csdn.net/zbw970802/article/details/81513929