MySQL数据查询语言(DQL)

本文详细介绍了MySQL中的数据查询语言(DQL),包括基础查询、条件查询、分组、排序、连接查询、子查询等核心概念。通过各种实例展示了如何使用SELECT语句进行单个和多个字段查询、条件筛选、函数应用、分页和联合查询等操作,旨在帮助读者掌握MySQL的查询技巧。
摘要由CSDN通过智能技术生成

1 概述

数据查询语言(Data Query Language):查询(SELECT)。

2 基础查询

语法:

SELECT
		查询列表
FROM
		表名;

注意:

  1. 查询列表可以是:表中的字段、常量值、表达式、函数
  2. 查询的结果是一个虚拟的表格

2.1 查询表中的单个字段

SELECT last_name FROM employees;

2.2 查询表中的多个字段

SELECT last_name,salary,email FROM employees;

2.3 查询表中的所有字段

SELECT * FROM employees;

2.4 查询常量值

SELECT 100;

SELECT 'john';

2.5 查询表达式

SELECT 100%98;

2.6 查询函数

SELECT VERSION();

2.7 起别名

SELECT 100%98 AS 结果;

SELECT last_name AS 姓,first_name AS 名 FROM employees;

SELECT last_name 姓,first_name 名 FROM employees;

SELECT salary AS 'out put' FROM employees;

2.8 去重

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

SELECT DISTINCT department_id FROM employees;

2.9 +的作用

MySQL中+只能当做算数运算符。比如’123’+90会解析成123+90,‘john’+90会解析成0+90,null+10会解析成null。

2.10 字符串拼接

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

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

3 条件查询

  语法:

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

3.1 按条件表达式筛选

条件运算符:> < = != <> >= <=

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

SELECT
		*
FROM
		employees
WHERE
		salary>12000;

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

SELECT
		last_name,
		department_id
FROM
		employees
WHERE
		department_id<>90;

3.2 按逻辑表达式筛选

逻辑运算符:&& || ! AND OR NOT

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

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

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

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

3.3 模糊查询

LIKE

通配符:

  • %:匹配任意多个字符。
  • _:任意单个字符。

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

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

案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资。

SELECT
		last_name,
		salary
FROM
		employees
WHERE
		last_name LIKE '__e_a%';

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

SELECT
		last_name
FROM
		employees
WHERE
		last_name LIKE '_\_%';

案例4:查询员工名中第一个字符为$的员工名。

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

BETWEEN AND

注意:

  • 使用BETWEEN AND可以提高语句的简洁度。
  • 包含临界值。
  • 两个临界值不要调换顺序。

案例1:查询员工编号在100到1200之间的员工信息。

SELECT
		*
FROM
		employees
WHERE
		employees_id BETWEEN 100 AND 120;

IN

判断某字段的值是否 属于IN列表中的某一项

特点:

  • 提高语句简洁度
  • 列表的值类型必须一致或兼容

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

SELECT
		last_name,
		job_id
FROM
		employees
WHERE
		job_id IN('IT_PROT','AD_VP','AD_PRES');

IS NULL

注意:

  • =或<>不能用于判断NULL值。
  • IS NULL或IS NOT NULL可以判断NULL值。

案例1:查询没有奖金的员工名和奖金率。

SELECT
		last_name,
		commission_pct
FROM
		employees
WHERE
		commission_pct IS NULL;

3.4 安全等于 <=>

<=>既能判断NULL值,又能判断普通数值。

案例1:查询没有奖金的员工名和奖金率。

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

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

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

4 排序查询

注意:

  • ASC表升序,DESC表降序,默认升序。
  • ORDER BY子句中可以支持单个字段、多个字段、表达式、函数、别名。
  • ORDER BY子句一般式放在查询语句的最后面,limit子句除外。

语法:

SELECT
		查询列表
FROM
		表
WHERE
		筛选条件
ORDER BY
		排序条件 [ASC|DESC]

案例1:查询员工信息,要求工资从高到低排序。

SELECT
		*
FROM
		employees
ORDER BY
		salary DESC;

案例2:查询部门编号>=90的员工信息,按入职时间的先后排序

SELECT
		*
FROM
		employees
WHERE
		department_id>=90
ORDER BY
		hiredate ASC;

案例3:按年薪的高低显示员工的信息和年薪(按表达式排序)

SELECT
		*,
		salary*12*(1+IFNULL(commission_pct,0))
FROM
		employees
ORDER BY
		salary*12*(1+IFNULL(commission_pct,0)) DESC;

案例4:按年薪的高低显示员工的信息和年薪(按别名排序)

SELECT
		*,
		salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM
		employees
ORDER BY
		年薪 DESC;

案例5:按姓名的长度显示员工的姓名和工资(按函数排序)

SELECT
		LENGTH(last_name),
		last_name,
		salary
FROM
		employees
ORDER BY
		LENGTH(last_name) DESC;

案例6:查询员工信息,要求先按工资升序,再按员工编号降序(多字段排序)

SELECT
		*
FROM
		employees
ORDER BY
		salary ASC,
		employee_id DESC;

5 常见函数

类似于Java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。

好处:

  • 隐藏了实现细节。
  • 提高代码的重用性。

调用:

SELECT
		函数名([实参列表])
FROM
		表名;

5.1 单行函数

5.1.1 字符函数

LENGTH

获取参数值的字节个数。

在utf8中一个汉字占3个字节,在gb2312中一个汉字占两个字节。

CONCAT

拼接字符串。

SELECT
		CONCAT(last_name,'_',first_name) 姓名
FROM
		employees;
UPPER、LOWER

案例1:将姓变大写、名变小写,然后拼接。

SELECT
		CONCAT(UPPER(last_name),LOWER(first_name)) 姓名
FROM
		employees;
SUBSTR、SUBSTRING

截取子串

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值