一:基础查询

  1. #进阶一:基础查询
  2. /*
  3. 语法:
  4. select 查询列表 from 表名;
  5. 特点:
  6. 1.查询的结果集是一个虚拟表
  7. 2.select类似于System.out.println();
  8. 3.执行顺序:
  9. 先执行from子句;
  10. 再执行select子句。
  11. 4.查询列表可以是:字段、表达式、常量、函数等
  12. */
  13. #一:查询常量
  14. SELECT 100;
  15. #二:查询表达式
  16. SELECT 100%3;
  17. #三:查询单个字段(``是着重号,通常在加在列名和表名上,为了和关键字区分)
  18. SELECT last_name FROM employees;
  19. SELECT `last_name` FROM `employees`;
  20. #四:查询多个字段
  21. SELECT `employee_id`,`first_name`,`email` FROM employees;
  22. #五:查询所有字段(结果集中的列名顺序和原表相同)
  23. SELECT * FROM employees;
  24. #六:查询函数(调用函数、获取返回值)
  25. SELECT DATABASE();
  26. SELECT VERSION();
  27. SELECT USER();
  28. #七:起别名
  29. #方式一:使用as关键字
  30. SELECT last_name AS FROM employees;
  31. SELECT last_name AS '姓' FROM employees;
  32. SELECT last_name AS "姓" FROM employees;
  33. SELECT last_name AS '姓 名' FROM employees;#此时必须要加''""
  34. SELECT last_name AS "姓 名" FROM employees;
  35. #方式二:使用空格
  36. SELECT first_name "名" FROM employees;
  37. #八:查询first_name和last_name拼接成的全名,最终起别名为“姓名”。(使用concat拼接函数)(拼接的时候,如果一个字段为null,则全都为null,此时可以使用ifnull()函数避免此状况)
  38. SELECT CONCAT(last_name,last_name) AS "姓 名" FROM employees;
  39. /*
  40. JAVA中“+”的作用:加法运算、拼接符
  41. mysql中“+”的作用:加法运算
  42. */
  43. #九:distinct关键字的使用(去除重复数据)
  44. SELECT DISTINCT department_id FROM employees;
  45. #十:查看表结构
  46. DESC employees;
  47. SHOW COLUMNS FROM employees;
  48. #十一:ifnull(参数一,参数二)函数。(如果“参数一”为null,则显示“参数二”,如果“参数一”不为null,则显示“参数一”)
  49. SELECT commission_pct,IFNULL(commission_pct,'空') FROM employees;

二:条件查询

#进阶二:条件查询
/*
语法:
select 查询列表
from 表名
where 筛选条件;

执行顺序:
from子句
where子句
select子句

特点;
  1.按关系表达式筛选
      关系运算符:>    <    >=    <=    =    <>
      补充:<>在SQL中是不等于的意思,也可以使用!=,但不建议
  2.按逻辑表达式筛选
      逻辑运算符:and    or    not
          补充:也可以使用%%、||、!,但不建议
  3.模糊查询
      like
      in
      between and
      is null
*/

#一:按关系表达式筛选(查询部门编号不是100的员工信息)
select *
from employees
where department_id <> 100;

#二:按逻辑表达式筛选(查询部门编号不是50~100之间的员工信息)
   #方式一:
select * 
from employees 
where department_id < 50 or department_id > 100;
   #方式二:(语义性更强)
SELECT * 
FROM employees 
WHERE not(department_id >= 50 and department_id <= 100);


#三:模糊查询

   #3.1:like \ not like
   /*
    功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询。
    常见的通配符:
        _ 任意单个字符
        % 任意多个字符,支持0-多个
   */
    #案例一:查询姓名中包含字符a的员工信息
    select *
    from employees
    where last_name like '%a%';
    #案例一:查询姓名中第二个字符为"_"的员工信息(使用\转义字符)
    SELECT *
    FROM employees
    WHERE last_name LIKE '_\_%';    
    #或者(ESCAPE:将XXX设置为转义字符)(推荐使用)
    SELECT *
    FROM employees
    WHERE last_name LIKE '_$_%' escape '$';

   #3.2:in / not in
   /*
    功能:查询某字段的值是否属于指定的列表之内
    in(常量值1,常量值……)
   */
       #案例一:查询部门编号是30/50/90的员工名
       select last_name
       from employees
       where department_id in(30,50,90);

   #3.3:between and / not between and
   /*
    功能:判断某个字段的值是否介于XXX之间
   */
       #案例一:查询部门编号是30~90的员工名
       select last_name
       from employees
       where department_id between 30 and 90;#30和90的顺序不能颠倒
       #案例二:查询年薪不是100000到200000之间的员工姓名、工资、年薪
       select last_name,salary,salary*12*(1+ifnull(commission_pct,0)) as '年薪'
       from employees
       where salary*12*(1+IFNULL(commission_pct,0)) not between 100000 and 200000;

   #3.4:is null / is not null
       #案例一:查询没有奖金的员工信息
       select *
       from employees
       where commission_pct is null;
       /*
        说明:
        commission_pct = NULL;是错误的,因为:
            =     只能判断普通的内容
            IS    只能判断NULL值
            <=>   安全等于,既能判断普通内容,又能判断NULL值
       */

三:排序查询

#进阶三:排序查询
/*
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序列表

执行顺序:
from子句
where子句
select子句
order by子句

特点:
1.排序列表可以是单个字段、多个字段、表达式、别名、函数、列数、以及以上的组合
2.升序,通过asc,默认行为
  降序,通过desc
*/

#一:按单个字段排序
#案例一:将员工编号大于120的员工信息进行工资的升序
SELECT *
FROM employees
WHERE employee_id > 120
ORDER BY salary ASC;

#二:按表达式排序
#案例一:对有奖金的员工,按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS '年薪'
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

#三:按别名排序
#案例一:对有奖金的员工,按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS '年薪'
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY '年薪' DESC;

#四:按函数的结果排序
#案例一:按姓名的字数长度进行升序
SELECT last_name
FROM employees
ORDER BY LENGTH(last_name) ASC;

#五:按多个字段排序
#案例一:查询员工的姓名、工资、部门编号,先按工资升序,再按部门编号降序
SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ASC,department_id DESC;

#六:按列数排序(补充选学)
SELECT *
FROM employees
ORDER BY 2;