day3(数据库SQL)

2、MySQL 中的自增列

  AUTO_INCREMENT:自动增长,加入一个列声明了自增列,无需手动赋值,直接设置为NULL,会获取当前的最大值,然后加1插入。

  注意:自增列允许手动赋值

             只适用于整数型的主键列上 

3、简单查询 

  (1)查询特定的列

    示例:查询所有员工的姓名、工资、生日

    SELECT ename,salary,birthday FORM emp;

  (2)查询所有的列

    SELECT * FROM emp;

    SELECT die,ename,sex,birthday,salary,deptId;

  (3)给列起别名

    示例:查询所有员工的姓名和工资,使用汉字的别名显示

    SELECT ename AS 姓名,salary AS 工资 FROM emp;

练习:查询所有员工的编号,姓名,性别,生日,用中文别名

SELECT eid AS 编号,ename AS 姓名,sex AS 性别,birthday AS 生日 FROM emp;

练习:查询所有员工编号,姓名,使用一个英文字母别名

SELECT eid AS a,ename AS b FROM emp;

    注意:AS关键字是可以省略的,保留空格。

  (4)只显示不同的记录/合并相同的记录

    示例:查询出员工都在哪些部门

    SELECT DISTINCT deptID FROM emp;

练习:查询出都有哪些性别的员工

SELECT DISTINCT sex FROM emp;

  (5)在查询时执行计算

    示例:计算2*33/47-8+10

    SELECT 2*33/47-8+10;

练习:查询出所有员工的姓名及其年薪

SELECT ename,salary*12 FROM emp;

练习:假设每个员工工资增加500元,年终奖5000元,查询所有员工的姓名及其年薪,要给列起别名

SELECT ename 姓名,(salary+500)*12+5000 年薪 FROM emp;

  (6)对查询的结果集进行排序

    示例:查询所有的部门,结果按照部门编号升序排列

    SELECT * FROM dept ORDER BY did ASC;#ascendant

    示例:查询所有的部门,结果按照部门编号降序偶排列

    SELECT * FROM dept ORDER BY did DESC;#descendant

练习:查询所有员工信息,结果安装工资又打到小排序

SELECT * FROM emp ORDER BY salary DESC;

练习:查询所有员工,结果按照年龄由大到小排序

SELECT * FROM emp ORDER BY birthday ASC;

练习:查询所有员工,结果按照年龄由大到小排序

SELECT * FROM emp ORDER BY birthday DESC;

练习:查询所有员工,结果按姓名的升序排序

SELECT * FROM emp ORDER BY ename ASC;

练习:查询所有员工,结果按工资降序排序,如果工资相同按照姓名排序

SELECT * FROM emp ORDER BY salary DESC,ename;

练习:查询所有员工,结果按照性别排序,如果性别相同按照公资的升序排序。

SELECT * FROM emp ORDER BY sex,salary;

  ORDER BY 可以按照 数值,日期/时间、字符串来排序

  默认按照ASC升序排列

  (7)条件查询

    示例:查询出编号为5的员工所有信息

    SELECT * FROM emp WHERE eid=5;

    >=  <=  >  <  =  !=(不等于) 比较运算符

练习:查询出姓名为king的员工的编号,工资,生日。

SELECT eid,salary,birthday FROM emp WHERE ename='king';

练习:查询出20号部门下所有员工的信息

SELECT * FROM emp WHERE deptId=20;

练习:查询出男员工的所有信息

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;

练习:查询出有明确部门的员工所有信息

SELECT * FROM emp WHERE deptId IS NOT NULL;

练习:查询出工资大于6000的女员工所有信息

SELECT * FROM emp WHERE salary>6000 AND sex=0;

练习:查询出工资在5000~7000之间的员工所有信息

SELECT * FROM emp WHERE salary>=5000 AND salary<=7000;

SELECT * FROM emp WHERE salary BETWEEN 5000 AND 7000;

练习:查询出工资为5000以下,7000以上的员工所有信息。

SELECT * FROM emp WHERE salary<5000 OR salary>7000;

SELECT * FROM emp WHERE salary NOT BETWEEN 5000 AND 7000;

练习:查询出1990之前出生的员工,和1993年之后出生的员工所有信息

SELECT * FROM emp WHERE birthday NOT BETWEEN '1990-1-1' AND '1993-12-31';

练习:查询出1993年出生的员工信息

SELECT * FROM emp WHERE birthday  BETWEEN '1993-1-1' AND '1993-12-31';

练习:查询出10号部门和30号部门的员工所有信息

SELECT * FROM emp WHERE deptId=10 OR deptId=30;

SELECT * FROM emp WHERE deptId IN(10,30);

练习:查询出不在10号部门和30号部门的员工所有信息

SELECT * FROM emp WHERE deptId NOT IN(10,30);

IS NULL/IS NOT NULL        AND/OR        BETWEEN...AND.../NOT BETWEEN...AND...    IN()/NOT IN()

注意:删除、更改、查询都可以结合条件查询。

  (8)模糊条件查询

    示例:查询出姓名含有字母e的员工所有信息

    SELECT *FROM emp WHERE ename LIKE '%e%';

练习:查询出姓名中以e结尾的员工所有信息

SELECT *FROM emp WHERE ename LIKE '%e';

练习:查询出姓名中倒数第2个字符为e的员工所有信息

SELECT *FROM emp WHERE ename LIKE '%e_';

SQL中提供了两个模糊查询的字符

% 可以匹配任意多个字符  >= 0

可以匹配任意一个字符   =1

注意:以上两个匹配不能和=使用,必须使用LIKE关键字

(9)分页查询

  假如查询的结果集中有太多的数据,一次显示不完,可以分页显示。

  需要有两个条件,当前的页码、每页的数据量

  SELECT * FROM emp LIMIT start,count;

  start:是一个数字,从结果集中的哪一条开始读取;

  count:是一个数字,最多读取的行数

  start=(页码-1)*count

  假设每一页显示5条记录

第一页:SELECT  * FROM emp LIMIT 0,5;

第二页:SELECT  * FROM emp LIMIT 5,5;

第三页:SELECT  * FROM emp LIMIT 10,5;

第四页:SELECT  * FROM emp LIMIT 15,5;

假设每一页显示6条记录

第一页:SELECT  * FROM emp LIMIT 0,6;

第二页:SELECT  * FROM emp LIMIT 6,6;

(10)复杂查询——聚合查询/分组查询

  SELECT COUNT(*) FROM emp;

  示例:查询出所有员工的数量

  SELECT COUNT(eid) FROM emp;

练习:使用员工的姓名获取员工数量

SELECT COUNT(ename) FROM emp;

练习:使用员工的部门编号获取员工数量

SELECT COUNT(deptId) FROM emp;

  函数:功能体,接收若干个数据,返回特定的结果 -- 饺子机

  聚合函数:count()/sum()/AVG/MAX()/MIN()


练习:查询出所有员工工资的综合

SELECT SUM(salary) FROM emp;

练习:查询出所有男员工的平均工资

SELECT AVG(salary) FROM emp WHERE sex=1;

练习:查询出工资最高的员工工资

SELECT MAX(salary) FROM emp;

练习:查询出工资最低的员工工资

SELECT MIN(salary) FROM emp;

练习:查询年龄最大员工的生日

SELECT MIN(birthday) FROM emp;

  分组查询

  只能查询分组条件和聚合函数

  示例:按部门编号进行分组,按工资排序

SELECT deptId, MAX(salary) FROM emp GROUP BY deptId;

练习:查询出男女员工的平均工资,最高工资,最低工资

SELECT sex,MAX(salary),MIN(salary),AVG(salary) FROM emp GROUP BY sex;

  YEAR()  获取日期中的年份

  MONTH() 获取日期中的月份

  示例:查询1991年出生的员工

SELECT * FROM emp WHERE YEAR(birthday) = 1991;

  示例:查询3月份出生的员工

SELECT * FROM emp WHERE MONTH(birthday) = '3';

2、复杂查询——子查询

  本质上就是一个SQL语句的查询结果昨晚另一个SQL语句的查询条件

  示例:查询出研发部员工的所有信息

  步骤1:查询研发部的部门编号

SELECT did FROM dept WHERE dname='研发部';

  步骤2:使用编号查询员工

SELECT * FROM emp WHERE deptId=10;

综合:SELECT * FROM emp WHERE deptId=(SELECT did FROM dept WHERE dname='研发部');

练习:查询出比tom工资高的员工所有信息

SELECT * FROM emp WHERE salary>(SELECT salary FROM emp WHERE ename='Tom');

练习:查询出和tom同一年出生的

SELECT * FROM emp WHERE YEAR(birthday) = (SELECT YEAR(birthday) FROM emp WHERE ename = 'Tom');

3、复杂查询——多表查询

  示例:查询出所有员工的姓名及其所在的部门名称

SELECT ename,dname FROM emp,dept;  笛卡尔积

如何避免笛卡尔积,为多表查询添加条件。

SELECT ename,dname FROM emp,dept WHERE deptId=did;

上述语法无法查询出没部门的员工,也不能查询没有员工的部门——SQL92

(1)内连接   INNER JOIN....ON....;——和之前的结果一样

  SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did;

(2)左外连接  LEFT OUTER JOIN....ON...——查询结果是左侧表中所有的记录,即使右侧没有对应的记录 OUTER可以省略

  SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did;  

(3)右外连接 RIGHT OUTER JOIN...ON——查询结果是右侧表中所有的记录,即使右侧没有对应的记录 OUTER可以省略

  SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did; 

(4)全连接  FULL JOIN 显示左侧和右侧表中的所有记录——MySQL不支持

MySQL中的全连接 UNION 合并相同的记录

          UNION ALL 不合并相同的记录

(SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did)UNION(SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did);

项目中如何保存日期、时间

2018-12-6   2018年12月6日  2018/12/6  12/6/2018

存储的是距离计算机元年(1970-1-1)的毫秒数

48*365*24*60*60*1000

1513728000000 使用BIGINT的列类型

posted @ 2019-10-18 15:25  无双灬灵  阅读(164)  评论(0)    收藏  举报