MySQL学习记录:第一章 DQL语言

文章目录

  • 第一章 查询语言,DQL语言
    • 一、基础查询
      • 1、查询表中单个字段
      • 2、查询表中多个字段
      • 3、查询表中所有字段
      • 4、查询常量值
      • 5、查询表达式
      • 6、查询函数
      • 7、起别名
      • 8、去重
      • 9、+号的作用
    • 二、条件查询
      • 1、按条件表达式筛选
      • 2、按逻辑表达式筛选
    • 三、模糊查询
    • 四、排序查询
    • 五、常见函数
      • 1、单行函数
        • (1)字符函数
          • ①LENGTH
          • ②CONCAT
          • ③UPPER|LOWER
          • ④SUBSTR|SUBSTRING
          • ⑤INSTR
          • ⑥TRIM
          • ⑦LPAD
          • ⑧RPAD
          • ⑨REPLACE
        • (2)数学函数
          • ①ROUND
          • ②CEIL
          • ③FLOOR
          • ④TRUNCATE
          • ⑤MOD
          • ⑥RAND
        • (3)日期函数
          • ①NOW()
          • ②CURDATE()
          • ③CURTIME()
          • ④获取日期时间的指定部分,年月日时分秒
          • ⑤STR_TO_DATE
          • ⑥DATE_FORMAT
          • ⑦ DATEDIFF
        • (4)其他函数
        • (5)流程控制函数
          • ①IF
          • ②CASE函数,使用一,switch case效果
          • ③CASE函数,使用二,类似多重if
      • 2、分组函数
        • (1)分组函数简单使用
        • (2)搭配参数类型验证
        • (3)是否忽略null值
        • (4)和distinct搭配
        • (5)count函数详细介绍,统计非空值个数
        • (6)知识点:GROUP BY
          • ①按表达式或函数分组
          • ②按多个字段分组
          • ③添加排序
    • 六、连接查询
      • 1、sql192标准:支持内连接
        • (1)等值连接
        • (2)连接时为表起别名,
          • ①验证两个表的顺序是否可以调换
          • ②连接查询可以加筛选
          • ③连接查询可以加分组
          • ④连接查询可以加排序
          • ⑤三表连接查询
        • (3)非等值连接
        • (4)自连接
      • 2、sql199标准:支持内连接*+外连接(左外*和右外*)+交叉连接
        • (1)内连接
          • ①等值连接
          • ②非等值连接
          • ③自连接
        • (2)外连接
          • ①左外连接与右外连接
          • ②全外连接(mysql不支持)
          • ③交叉连接
    • 七、子查询
      • 1、where后面或having后面*
        • (1)标量子查询(单行)
        • (2)列子查询(多行)
        • (3)行子查询(一行多列或多行多列)
      • 2、select后面
      • 3、from后面
      • 4、exists后面(相关子查询)
    • 八、分页查询*
    • 九、联合查询

第一章 查询语言,DQL语言

一、基础查询

/*
语法

SELECT  查询列表  FROM  表名;

特点
1、查询列表可以是字段、常量、表达式、函数,也可以是多个
2、查询结果是一个虚拟表
*/

1、查询表中单个字段

SELECT last_name FROM employees;

2、查询表中多个字段

SELECT last_name,salary,email FROM employees;

3、查询表中所有字段

SELECT * FROM employees;

4、查询常量值

#注意:字符型和日期型常量值须用单引号引起来

SELECT 100;
SELECT 'john';

5、查询表达式

SELECT 100%98;

6、查询函数

SELECT VERSION();

7、起别名

/*
目的
①便于理解;
②若查询字段有重名时可用别名区分*/

#方式一:使用AS

SELECT 100%98 as 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;

#方式二:使用空格

SELECT last_name 姓,first_name 名 FROM employees;

#案例:查询salary,显示结果为out_put

SELECT salary 'out put' FROM employees;

8、去重

#案例:查询员工表中涉及到的所有部门编号

SELECT DISTINCT department_id FROM employees;

9、+号的作用

/*
java中+号作用
①运算符:两个操作数都为数值型
②连接符:只要有一个操作数为字符串

mysql中+号的作用
①仅仅是运算符功能

select 数值+数值,直接运算
select 字符+数值,先试图将字符转换成数值,若转换成功,则继续运算;否则转换为0,再运算
select null+值,结果都为null

相关知识点
CONCAT(str1,str2,…),拼接字符

IFNULL(expr1,expr2),判断某字段或表达式是否为null,若是null,返回指定的值,否则返回原本的值

ISNULL(expr),判断某字段或表达式是否为null,若是null,则返回1,否则返回0
*/

#案例:查询员工名和姓连接成一个字段,并显示为姓名

SELECT CONCAT(last_name,first_name) 姓名 FROM employees;

#显示表的全部列,各列用逗号连接,列头显示out_put

SELECT
CONCAT(first_name,',',last_name,',',job_id,',',IFNULL(commission_pct,0)) 
as 'out_put'
FROM
employees;

#显示department表结构,并查询表

DESC departments;
SELECT * FROM departments;

二、条件查询

/*
语法

SELECT
查询列表
FROM
表名
WHERE
筛选条件;

分类
(1)按条件表达式筛选,> < = != <> >= <=
(2)按逻辑表达式筛选,用于连接条件表达式 && || !,and or not

   ①&&和and:两个条件都为true,结果为true,反之为false
   ②||和or:只要有一个条件为true,结果为true,反之为false
   ③!和not:如果连接的条件本身为false,结果为true,反之为false

(3)模糊查询
①LIKE:一般与通配符搭配使用,可以判断字符型或数值型

  % 任意多个字符,包含0个字符
  - 任意单个字符

②BETWEEN AND

 可以提高语句简洁度
 包含临界值,且临界值不可调换顺序

③IN

判断某个字段的值是否属于in列表中的某一项
使用更简洁,列表内的值类型须保持一致或兼容

④is NULL is not NULL

=或<>不能判断null值
is null 或者is not null:仅仅可以判断null值,可读性比较高
安全等于:<=>,可以判断null值又可以判断普通数值,可读性低

*/

1、按条件表达式筛选

#案例:查询工资>12000的员工信息

SELECT * FROM employees
WHERE salary > 12000;

#案例:查询部门编号不等于90号的员工名和部门编号

SELECT  last_name, department_id FROM
employees WHERE department_id != 90;

2、按逻辑表达式筛选

#案例:查询工资在10000到20000之间的员工名、工资及奖金

SELECT  last_name, salary, commission_pct
FROM  employees WHERE
salary >= 10000 && salary <= 20000;

#案例:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT * FROM employees 
WHERE
#department_id<90 OR department_id>110 OR salary>15000;
NOT(department_id>=90 AND department_id<=110) OR salary>15000;

三、模糊查询

#案例:查询员工名中包含字符a的员工信息

SELECT * FROM employees
WHERE last_name LIKE '%a%';

#案例:查询员工名第四个字符a,第七个字符为a的员工信息

SELECT * FROM employees
WHERE last_name LIKE '___a__a%';

#案例:查询员工名中第二个字符为_的员工名

SELECT last_name FROM employees 
WHERE 
#last_name LIKE '_\_%';
last_name LIKE '_$_%' ESCAPE '$';

#案例:查询员工编号在100到120之间的员工信息

SELECT * FROM employees
WHERE
#employee_id >= 100 AND employee_id <= 120;
employee_id BETWEEN 100 AND 120;

#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号

SELECT last_name, job_id FROM employees
WHERE
#job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
job_id in ('IT_PROG','AD_VP','AD_PRES');

#案例:查询没有|有奖金的员工名和奖金率

SELECT last_name, commission_pct FROM employees
WHERE
#commission_pct IS NULL;
commission_pct <=> NULL;
#commission_pct IS NOT NULL;

#案例:查询工资为12000的员工信息

SELECT last_name, salary FROM employees
WHERE salary <=> 12000;

#查询员工号为176的员工姓名和部门编号、年薪

SELECT last_name, departmen

你可能感兴趣的:(数据库,MySQL,mysql,数据库)