本文主要是介绍三天学会MySQL(四)SQL之DQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一.SELECT基本操作
二.算数表达式与运算符
三.空值&别名&去重
四.查询中的行选择(where子句)
五.MySQL中的比较条件 &逻辑条件
六.使用 ORDER BY 排序
七.select查询练习
一.SELECT基本操作
SELECT 基本查询
SELECT 语句的功能
SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事:
列选择: 能够使用 SELECT 语句的列选择功能选择表中的列,这些列是想 要用查询返回的。当查询时,能够返回列中的数据。
行选择: 能够使用 SELECT 语句的行选择功能选择表中的行,这些行是想 要用查询返回的。能够使用不同的标准限制看见的行。
连接: 能够使用 SELECT 语句的连接功能来集合数据,这些数据被存储在不 同的表中,在它们之间可以创建连接,查询出我们所关心的数 据。
SELECT 基本语法

基本 SELECT 语句
在最简单的形式中, SELECT 语句必须包含下面的内容:
一个 SELECT 子句,指定被显示的列
一个 FROM 子句,指定表,该表包含 SELECT 子句中的字段列表
在语法中:

添加测试数据
将 data.sql文件 (戳链接)通过 Navicat 导入到 MySQL 中 itbz 数据库中。该文件包含了课程中所使用的案例表。
新建一个数据库,右键表,点击 运行SQL文件,选取SQL文件导入即可。

查询中的列选择
选择所有列
用跟在 SELECT 关键字后面的星号 (*) ,你能够显示表中数据的所有列。
示例:
查询 departments 表中的所有数据。
select * from departments;
选择指定列

能够用 SELECT 语句来显示表的指定列,指定列名之间用逗号分隔。
示例:
查询 departments 表中所有部门名称。
select department_name from departments;
在Navicat里执行SQL语句
点击要查询的表,点击查询,点击新建查询,输入sql语句,点击运行即可。

查看表的详细信息:
二.算数表达式与运算符
查询中的算术表达式
做完算数表达式,数据库中的数据不会改变,只是对查询的结果进行了算术运算。

需要修改数据显示方式,如执行计算,或者作假定推测,这些都可能用到算 术表达式。一个算术表达式可以包含列名、固定的数字值和算术运 算符。
使用算术运算符

示例:查询雇员的年薪,并显示他们的雇员 ID ,名字。
select employees_id,last_name, 12 * salary from employees;
运算符的优先级
如果算术表达式包含有一个以上的运算,乘法和除法先计算。如果在一个表达式中 的运算符优先级相同,计算从左到右进行。可以用圆括号强制其中 的表达式先计算。
示例一:
计算 employees 表中的员工全年薪水加 100 以后的薪水是多少,并显示他们的员工 ID 与名字。
select employees_id,last_name, 12 * salary + 100 from employees;
示例二:
计算 employees 表中的员工薪水加 100 以后的全年薪水是多少,并显示他们的员工 ID 与名字。
select employees_id,last_name, 12 * ( salary + 100 ) from employees;
三.空值&别名&去重
MySQL 中定义空值
如果一行中的某个列缺少数据值,该值被置为 null , 或者说包含一个空。
空是一个难以获得的、未分配的、未知的,或不适用的值。空和 0或者空格不相同。 0 是一个数字,而空格是一个字符。
算术表达式中的空值

示例:
计算年薪包含佣金。
select 12 * salary * commission_pct from employees;
如果算数表达式中的某一项中是null,那么算术表达式结果就是null。
MySQL 中的别名
使用列别名
SELECT 列名 AS 列别名 FROM 表名 WHERE 条件;
示例:
查询 employees 表将雇员 last_name 列定义别名为 name 。
select last_name as name from employees;
select last_name name from employees;
使用表别名
SELECT 表别名 . 列名 FROM 表名 as 表别名 WHERE 条件 ;
示例:
查询 employees 表为表定义别名为 emp ,将雇员 last_name 列定
义别名为 name 。
select emp.last_name name from employees emp;
MySQL中去除重复

除去相同的行

SELECT DISTINCT 列名 FROM 表名;
示例:
查询 employees 表,显示唯一的部门 ID 。
select distinct department_id from employees;
注意 distinct 关键字是使一条数据不重复,比如 select distinct department_id,salary from employees;
那么department_id,salary视作一条记录,即不允许有department_id 和 salary都相同的两条记录。
四.查询中的行选择(where子句)

用 WHERE 子句限制从查询返回的行。一个 WHERE 子句包含一个必须满足的条件, WHERE 子句紧跟着 FROM 子句 。如果条件是 true ,返回满足条件的行。
在语法中:
WHERE 限制查询满足条件的行
condition 由列名、表达式、常数和比较操作组成
1 SELECT * | 投影列 FROM 表名 WHERE 选择条件 ;
示例:
查询 departments 表中部门 ID 为 90 的部门名称与工作地点 ID 。
select department_name,location_id from
departments where department_id =90 ;
注意:where后面跟的条件返回的只是真或假,例如 select department_name,location_id from
departments where 1=1;
那么此条件永远为真,即查所有department_name,location_id。
五.MySQL中的比较条件 &逻辑条件
符号 != 也能够表示 不等于条件。
示例一:
查询 employees 表中员工薪水大于等于 3000 的员工的姓名与薪水。

select last_name,salary from employees where salary >= 3000 ;
示例二:
查询 employees 表中员工薪水不等于 5000 的员工的姓名与薪水。
select last_name,salary from employees where salary <> 5000 ;
其他比较条件
使用 BETWEEN 条件

可以用 BETWEEN 范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。
示例:
查询 employees 表,薪水在 3000-8000 之间的雇员 ID 、名字与薪水。
select employee_id,last_name,salary from
employees where salary between 3000 and 8000 ;
示例:
查询 employees 表,找出薪水是 5000,6000,8000 的雇员 ID 、名字与薪水。
select employee_id,last_name,salary from
employees where salary in ( 5000 , 6000 , 8000 ) ;
使用 LIKE 条件
示例:
查询 employees 中雇员名字第二个字母是 e 的雇员名字。
select last_name from employees where
last_name like '_e%' ;
注意:%可以表示零个字符!
使用 NULL 条件
NULL 条件,包括 IS NULL 条件和 IS NOT NULL 条件。
select last_name from employees where
last_name like '_e%' ;
IS NULL 条件用于空值测试。空值的意思是难以获得的、未指定的、未知的或者不适用的。因此,你不能用 = ,因为 null 不能等于 或不等于任何值。
示例一:
找出 emloyees 表中那些没有佣金的雇员雇员 ID 、名字与佣金。
select employee_id,last_name,commission_pct
from employees where commission_pct is null ;
示例二:
找出 employees 表中那些有佣金的雇员 ID 、名字与佣金。
select employee_id,last_name,commission_pct
from employees where commission_pct is not null ;
逻辑条件
逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果,或者逆
转一个单个条件的结果。当所有条件的结果为真时,返回行。
SQL 的三个逻辑运算符是:
可以在 WHERE 子句中用 AND 和 OR 运算符使用多个条件。
示例一:
查询 employees 表中雇员薪水是 8000 的并且名字中含有 e 的雇员名字与薪水。
select last_name,salary from employees where
salary = 8000 and last_name like '%e%' ;
示例二:
查询 employees 表中雇员薪水是 8000 的或者名字中含有 e 的雇员名字与薪水。
select last_name,salary from employees where
salary = 8000 or last_name like '%e%' ;
示例三:
查询 employees 表中雇员名字中不包含 u 的雇员的名字。
select last_name from employees where
last_name not like '%u%' ;
优先规则

在图片的例子中,有两个条件:
第一个条件是 job_id 是 AD_PRES 并且薪水高于 15,000 。
第二个条件是 job_id 是 SA_REP 。
在图片中的例子有两个条件:
第一个条件是 job_id 是 AD_PRES 或者 SA_REP 。
第二个条件是薪水高于 $15,000
六.使用 ORDER BY 排序
在一个不明确的查询结果中排序返回的行。 ORDER BY 子句用于排序。如果使用了 ORDER BY 子句,它 必须位于 SQL 语句的最后 。
SELECT 语句的执行顺序如下:
- FROM 子句
- WHERE 子句
- SELECT 子句
- ORDER BY 子句
示例一:
查询 employees 表中的所有雇员,显示他们的 ID 、名字与薪水,并按薪水升序排序。
select employee_id,last_name,salary from
employees order by salary; (默认是升序)
select employee_id,last_name,salary from
employees order by salary asc ;
示例二:
查询 employees 表中的所有雇员,显示他们的 ID 与名字,并按雇员名字降序排序。
select employee_id,last_name from employees
order by last_name desc ;
使用别名排序

示例:
显示雇员 ID ,名字。计算雇员的年薪,年薪列别名为 annsal ,并对该列进行升序排序,
select employee_id,last_name , 12 * salary annsal from employees order by annsal;
多列排序

示例:
以升叙排序显示 DEPARTMENT_ID 列,同时以降序排序显示SALARY 列。
select last_name from employees
order by department_id asc ,salary desc ;
(先按department_id 升序排序,salary 降序排序,而且要注意这里select列表是last_name ,但是排序的属性却是别的,这就证明了上面的那句话, 可以排序一一个不在SELECT列表中的列 )
七.select查询练习
实现一个查询时先写出大题框架,再往里填补其他的东西。
select
from
where;
1.创建一个查询,显示收入超过 12,000 的雇员的名字和薪水。
select
LAST_NAME,SALARY
from employees
WHERE SALARY > 12000 ;
2.创建一个查询,显示雇员号为 176 的雇员的名字和部门号。
SELECT
LAST_NAME,DEPARTMENT_ID
from employees
where EMPLOYEE_ID = 176 ;
3.显示所有薪水不在 5000 和 12000 之间的雇员的名字和薪水。
select
LAST_NAME,SALARY
from employees
where salary not BETWEEN 5000 and 12000 ;
4. 显示所有在部门 20 和 50 中的雇员的名字和部门号,并以名字按字母顺序排序。
LAST_NAME,DEPARTMENT_ID
FROM employees
WHERE DEPARTMENT_ID IN ( 20 , 50 )
ORDER BY LAST_NAME asc ;
5. 列出收入在 5,000 和 12,000 之间,并且在部门 20 或 50 工作的雇员的名字和薪水。将列标题分别显示为 Employee 和 Monthly Salary
SELECT
LAST_NAME Employee,SALARY 'Monthly Salary'
FROM employees
WHERE SALARY BETWEEN 5000 and 12000
AND
DEPARTMENT_ID in ( 20 , 50 ) ;
6.显示所有没有主管经理的雇员的名字和工作岗位。
SELECT
LAST_NAME,JOB_ID
FROM employees
WHERE MANAGER_ID is null ;
7. 显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣金的降序排序数据。
SELECT
LAST_NAME,SALARY,COMMISSION_PCT
from employees
where COMMISSION_PCT is not NULL
ORDER BY SALARY DESC , COMMISSION_PCT desc ;
8.显示所有名字中有一个 a 和一个 e 的雇员的名字。
SELECT
LAST_NAME
from employees
where LAST_NAME LIKE '%a%'
AND
LAST_NAME LIKE '%e%' ;
9. 显示所有工作岗位是销售代表( SA_REP )或者普通职员(ST_CLERK) ,并且薪水不等于 2,500 、 3,500 或 7,000 的雇员的名 字、工作岗位和薪水。
SELECT
LAST_NAME,JOB_ID,SALARY
from employees
WHERE
JOB_ID in ( 'SA_REP' , 'ST_CLIERK' )
AND
SALARY not IN ( 2500 , 3500 , 7000 )
这篇关于三天学会MySQL(四)SQL之DQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!