ℹ️大家好,我是LXJ,今天星期二了,本文将讲述MYSQL查询数据的详细命令以及相关例题~~
复习:👉《Mysql函数的练习题》
同时,数据库相关内容查看专栏👉【数据库专栏】~
想要了解更多内容请点击我的主页:【练小杰的CSDN】
“倒霉,倒霉,倒霉!”——龙叔
文章目录
- 前言
- 基本查询语句
- 单个表格查询
- 查询所有字段
- 查询指定字段
- 查询指定记录
- 带IN关键字的查询
- 带BETWEEN AND的范围查询
- 带LIKE的字符匹配查询
- 查询空值
- 带AND的多条件查询
- 带OR的多条件查询
- 查询结果不重复
- 对查询结果排序
- 总结
- 分组查询
- GROUP BY的具体运用
- 用LIMIT限制查询结果的数量
- 举例:在表lxj中从第二行开始取一行数据
- 常用聚合函数(集合函数)
- `COUNT()`:计算行数
- `SUM()`: 计算总和
- `AVG()`:计算平均值
- `MAX()`:获取最大值
- `MIN()`: 获取最小值。
- 连接查询
- 内连接查询
- 外连接查询
- 复合条件连接查询
- 子查询
- ANY、SOME关键字的子查询
- ALL关键字的子查询
- EXISTS关键字的子查询
- IN关键字的子查询
- 带比较运算符的子查询
- 合并查询结果
- 为表取别名
- 为字段取别名
- 使用正则表达式查询
- 查询以特定字符或字符串开头的记录
- 查询以特定字符或字符串结尾的记录
- 替代字符串中的任意一个字符
- 匹配多个字符
- 匹配指定字符串
- 匹配指定字符中的任意一个
- 匹配指定字符以外的字符
- 指定字符串连续出现的次数
- 综合案例——数据表查询操作
- 操作步骤
前言
本文最后一段有综合实例,不想看概念的可以直接翻到最后!!!🙏🙏
基本查询语句
MySQL从数据表中查询数据的基本语句为
SELECT
语句。
- 最简单的查询语句
select * from tablname;
#查询表tablename里的所有字段的数据
单个表格查询
查询所有字段
在SELECT语句中使用星号“
*
”通配符查询所有字段
指定所有字段:select * from tablname;
查询指定字段
需要先创建测试数据库,并新建表插入数据,才能查询到表里的数据内容
CREATE DATABASE test; #建立数据库test
use test;
CREATE TABLE lxj(
x INT,
y SMALLINT,
); #建立表格lxj
INSERT INTO lxj VALUES(12,24); #插入数据
INSERT INTO lxj VALUES(20,24);
- 查询单个字段
查询表lxj中字段x的数据
select x from lxj;
+------+
| x |
+------+
| 12 |
| 20 |
+------+
- 查询多个字段
查询表lxj中字段x和y的数据
select x,y from lxj;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
+------+------+
查询指定记录
在SELECT 语句中加入
where
子句,对数据进行过滤
- 语法格式为:
SELECT 字段名1,字段名2,…,字段名n
FROM 表名
WHERE 查询条件
- 举个例子:查询表lxj中
x=12
的相关数据
select *from lxj where x=12;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
+------+------+
带IN关键字的查询
IN
操作符:查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件用逗号分隔开,只要满足条件范围内的一个值即为匹配项。
- 在表lxj中 ,查询字段y 等于12和24的所有数据
SELECT * FROM lxj WHERE y IN (12, 24);
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
+------+------+
带BETWEEN AND的范围查询
BETWEEN AND
(在…之间):查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围查询条件,则这些记录被返回。
-在表lxj中,查询字段x的范围在10~15之间的信息
SELECT * FROM lxj where x between '10' and '15';
+------+------+
| x | y |
+------+------+
| 12 | 24 |
+------+------+
带LIKE的字符匹配查询
百分号通配符‘
%
’, 匹配任意长度的字符,也包括零字符
下划线通配符‘_
’, 一次只能匹配任意一个字符
- 在表lxj中,查询字段x中以数字2开头的信息
SELECT * FROM lxj where x LIKE '2%';
+------+------+
| x | y |
+------+------+
| 20 | 24 |
+------+------+
- 在表lxj中,查询字段x 中以十位数为1 的信息
SELECT * FROM lxj where x LIKE '1_';
+------+------+
| x | y |
+------+------+
| 12 | 24 |
+------+------+
查询空值
使用
IS NULL
子句,可以查询某字段内容为空记录。
加上NOT
关键字,即IS NOT NULL
,效果相反,可以查询某字段不为空的信息
在表lxj中插入多行数据:
INSERT INTO lxj VALUES(Null,20);
- 查找字段x中所有没有数据的信息
SELECT * FROM lxj WHERE x IS NULL;
+------+------+
| x | y |
+------+------+
| NULL | 20 |
+------+------+
- 查找字段x中不为空信息
SELECT * FROM lxj WHERE x IS NOT NULL;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
+------+------+
带AND的多条件查询
使用
AND
连接两个甚至多个查询条件,多个条件表达式之间用AND分开。
- 在表lxj中,查询字段y=24且 x 不为空的信息
SELECT * FROM lxj WHERE y = '24' AND x IS NOT NULL;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
+------+------+
带OR的多条件查询
OR
操作符,表示只需要满足其中一个条件的记录即可返回。
OR也可以连接两个甚至多个查询条件,多个条件表达式之间用AND分开。
- 在表lxj中,查询字段 x=12 或者 x 为空的信息
SELECT * FROM lxj WHERE x = '12' OR x IS NULL;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| NULL | 20 |
+------+------+
查询结果不重复
在SELECT语句中可以使用
DISTINCE
关键字指示MySQL消除重复的记录值。
SELECT DISTINCT 字段名 FROM 表名;
对查询结果排序
可以通过在SELECT使用
ORDER BY
子句对查询的结果进行排序。
ORDER BY
子句可以用于单列排序、多列排序、以及指定排序方向等
- 基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC];
SELECT
:指定要查询的列。
FROM
:指定要查询的表。
WHERE
(可选):指定筛选条件。
ORDER BY
:指定用于排序的列,其中ASC
是 升序(默认的),DESC
是降序。
总结
- 使用
ORDER BY
子句可以方便地对查询结果进行单列或多列排序。 - 通过指定
ASC
或DESC
,可以控制排序的顺序。 - 最后再结合
WHERE
子句,就可以实现更复杂的查询和排序需求。
分组查询
分组查询 允许你根据一个或多个字段的值将数据分组,并对每个组执行聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等)。
主要通过GROUP BY
子句实现,常用于生成报表或进行数据分析。
- 基本格式:
SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING group_condition
ORDER BY column1, column2, ...;
SELECT:指定要查询的列和聚合函数。
WHERE(可选):指定筛选条件,在分组之前应用。
GROUP BY:指定用于分组的列。
HAVING(可选):指定组级别的筛选条件,在分组之后应用。
ORDER BY(可选):指定排序方式。
GROUP BY的具体运用
1.创建分组
2.使用HAVING过滤分组
3.在GROUP BY子句中使用WITH ROLLUP
4.多字段分组
5.GROUP BY和ORDER BY一起使用
用LIMIT限制查询结果的数量
LIMIT
关键字可以返回指定位置的记录。
LIMIT
后面的第一个数代表从第几行的下一行开始拿数据,第二个数代表取多少行数据
LIMIT [位置偏移量,] 行数
举例:在表lxj中从第二行开始取一行数据
先查询字段x 这列原数据为:
select x from lxj;
+------+
| x |
+------+
| 12 |
| 20 |
| NULL |
+------+
利用limit
关键字筛选数据
select x from lxj limit 2,1;
+------+
| x |
+------+
| NULL |
+------+
常用聚合函数(集合函数)
COUNT()
:计算行数
COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回的列中包含的数据行数。
⚠️注意:用于计算查询结果中非 NULL 值的行数
- 基本语法
COUNT(expression)
#expression:可以是列名、常量、表达式或 *(星号)
COUNT(*) #计算表中的所有行,包括包含 NULL 值的行
COUNT(字段名)
#计算数据表中指定字段名的行数
- 举例:在表
lxj
,计算字段x的行数(该列有12, 20,NULL)
返回表lxj的所有数据
SELECT * FROM lxj;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
| NULL | 20 |
+------+------+
SELECT count(x) AS 行数 FROM lxj;
+--------+
| 行数 |
+--------+
| 2 |
+--------+
可以看到,因为第三列数据为NULL,所以返回行数是2
SUM()
: 计算总和
SUM()
是一个求总和的函数,返回指定列值的总和
- 举例:查询字段x的这列数据的总和(该列有12, 20,NULL)
利用SUM函数计算并取别名total
SELECT SUM(x) AS total FROM lxj;
+-------+
| total |
+-------+
| 32 |
+-------+
AVG()
:计算平均值
AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
- 举例:查询字段x的这列数据的平均值(该列有12, 20,NULL)
SELECT AVG(x) AS 平均值 FROM lxj;
+-----------+
| 平均值 |
+-----------+
| 16.0000 |
+-----------+
MAX()
:获取最大值
MAX()返回指定列中的最大值。
- 举例:查询字段x的这列数据的最大值(该列有12, 20,NULL)
SELECT MAX(x) AS 最大值 FROM lxj;
+-----------+
| 最大值 |
+-----------+
| 20 |
+-----------+
MIN()
: 获取最小值。
MIN()返回查询列中的最小值。
- 举例:查询字段x的这列数据的最小值(该列有12, 20,NULL)
SELECT MIN(x) AS 最小值 FROM lxj;
+-----------+
| 最小值 |
+-----------+
| 12 |
+-----------+
连接查询
内连接查询
内连接(
INNER JOIN
)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录,也就是说,在内连接查询中,只有满足条件的记录才能出现在结果关系中。
外连接查询
返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
LEFT JOIN
(左连接) 和RIGHT JOIN
(右连接)
复合条件连接查询
复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果
例如:利用where子句、GROUP BY查询、以及用AND连接多个条件就是复合条件连接查询。
子查询
ANY、SOME关键字的子查询
ANY
和SOME
关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。
ALL关键字的子查询
ALL
关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件。
EXISTS关键字的子查询
EXISTS
关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。
IN关键字的子查询
IN
关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
带比较运算符的子查询
子查询还可以使用比较运算符,如<、<=、=、>=和!=等。
- 举例: 在表lxj,查询字段x 中大于10的数据
SELECT * FROM lxj where x>10;
+------+------+
| x | y |
+------+------+
| 12 | 24 |
| 20 | 24 |
+------+------+
合并查询结果
利用
UNION
关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。
合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
为表取别名
为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称。
表名 [AS] 表别名;
为字段取别名
为了方便查询表格,可以指定列别名,替换字段或表达式。
上述聚合函数的举例就是字段取别名的操作
列名 [AS] 列别名
使用正则表达式查询
查询以特定字符或字符串开头的记录
字符
^
匹配以特定字符或者字符串开头的文本。
查询以特定字符或字符串结尾的记录
字符
$
匹配以特定字符或者字符串结尾的文本。
替代字符串中的任意一个字符
字符
.
匹配任意一个字符。
匹配多个字符
星号
*
匹配前面的字符任意多次,包括0次。
加号+
匹配前面的字符至少一次。
匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符
|
隔开。
匹配指定字符中的任意一个
方括号
[]
指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
匹配指定字符以外的字符
[^字符集合]
匹配不在指定集合中的任何字符。
指定字符串连续出现的次数
使用
{M}
或者{M,N}
来指定字符串连续出现的次数
“字符串{n,}
”表示至少匹配n次前面的字符。
“字符串{n,m}
”表示匹配前面的字符串不少于n次,不多于m次。
综合案例——数据表查询操作
- 学习目标:熟悉数据表查询命令
操作步骤
- 创建数据表employee和dept。
CREATE TABLE dept
(
d_no INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
d_name VARCHAR(50),
d_location VARCHAR(100)
);
由于employee表dept_no依赖于父表dept的主键d_no,因此需要先创建dept表,然后创建employee表。
CREATE TABLE employee
(
e_no INT NOT NULL PRIMARY KEY,
e_name VARCHAR(100) NOT NULL,
e_gender CHAR(2) NOT NULL,
dept_no INT NOT NULL,
e_job VARCHAR(100) NOT NULL,
e_salary SMALLINT NOT NULL,
hireDate DATE,
CONSTRAINT dno_fk FOREIGN KEY(dept_no)
REFERENCES dept(d_no)
);
- 将指定记录分别插入两个表中。
向dept表中插入数据,SQL语句如下:
INSERT INTO dept
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');
向employee表中插入数据,SQL语句如下:
INSERT INTO employee
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'),
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
- 在employee表中,查询所有记录的
e_no
、e_name
和e_salary
字段值。
SELECT e_no, e_name, e_salary;
执行结果如下:
SELECT e_no, e_name, e_salary FROM employee;
+------+--------------+-------------+
| e_no | e_name | e_salary |
+------+--------------+--------------+
| 1001 | SMITH | 800 |
| 1002 | ALLEN | 1600 |
| 1003 | WARD | 1250 |
| 1004 | JONES | 2975 |
| 1005 | MARTIN | 1250 |
| 1006 | BLAKE | 2850 |
| 1007 | CLARK | 2450 |
| 1008 | SCOTT | 3000 |
| 1009 | KING | 5000 |
| 1010 | TURNER | 1500 |
| 1011 | ADAMS | 1100 |
| 1012 | JAMES | 950 |
+------+------------+-----------------+
12 rows in set (0.00 sec)
- 在employee表中,查询dept_no等于10和20的所有记录。
SELECT * FROM employee WHERE dept_no IN (10, 20);
执行结果如下:
SELECT * FROM employee WHERE dept_no IN (10, 20);
+------+--------+---------+---------+----------+----------+-----------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hireDate |
+------+--------+---------+---------+----------+----------+-----------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12 |
| 1004 | JONES | m | 20 | MANAGER | 2975 | 1998-05-18 |
| 1007 | CLARK | m | 10 | MANAGER | 2450 | 2002-09-12 |
| 1008 | SCOTT | m | 20 | ANALYST | 3000 | 2003-05-12 |
| 1009 | KING | f | 10 | PRESIDENT | 5000 | 1995-01-01 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
+------+--------+---------+---------+----------+----------+-----------+
6 rows in set (0.00 sec)
- 在employee表中,查询工资范围在800~2500之间的员工信息。
SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;
执行结果如下:
SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;
+------+-------------+----------------+------------+---------------+------------------+-----------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hireDate |
+------+--------------+-----------------+---------+-----------------+--------------------+-----------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12 |
| 1002 | ALLEN | f | 30 | SALESMAN | 1600 | 2003-05-12 |
| 1003 | WARD | f | 30 | SALESMAN | 1250 | 2003-05-12 |
| 1005 | MARTIN | m | 30 | SALESMAN | 1250 | 2001-06-12 |
| 1007 | CLARK | m | 10 | MANAGER | 2450 | 2002-09-12 |
| 1010 | TURNER | f | 30 | SALESMAN | 1500 | 1997-10-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
| 1012 | JAMES | m | 30 | CLERK | 950 | 2008-06-15 |
+------+---------------+---------------+--------------+-----------------+----------------+------------+
8 rows in set (0.00 sec)
- 在employee表中,查询部门编号为20的部门中的员工信息。
SELECT * FROM employee WHERE dept_no = 20;
执行结果如下:
SELECT * FROM employee WHERE dept_no = 20;
+------+-------------+-------------+----------------+-------------+----------------+------------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hireDate |
+------+-------------+------------------+------------+--------------+----------------+------------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12 |
| 1004 | JONES | m | 20 | MANAGER | 2975 | 1998-05-18 |
| 1008 | SCOTT | m | 20 | ANALYST | 3000 | 2003-05-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
+------+--------------+-----------------+-------------+--------------+------------------+------------+
4 rows in set (0.00 sec)
- 在employee表中,查询每个部门最高工资的员工信息。
SELECT dept_no, MAX(e_salary) FROM employee GROUP BY dept_no;
执行结果如下:
SELECT dept_no, MAX(e_salary) FROM employee GROUP BY dept_no;
+---------+-------------------+
| dept_no | MAX(e_salary) |
+---------+-------------------+
| 10 | 5000 |
| 20 | 3000 |
| 30 | 2850 |
+---------+-----------------+
3 rows in set (0.00 sec)
- 查询员工BLAKE所在部门和部门所在地。
SELECT d_no, d_location FROM dept WHERE d_no=(SELECT dept_no FROM employee WHERE e_name='BLAKE');
执行结果如下:
SELECT e_name,d_no, d_locationFROM dept WHERE d_no=(SELECT dept_no FROM employee WHERE e_name='BLAKE');
+------+------------+
| d_no | d_location |
+------+------------+
| 30 | ShenZhen |
+------+------------+
1 row in set (0.00 sec)
- 使用连接查询,查询所有员工的部门和部门信息。
SELECT e_no, e_name, dept_no, d_name,d_location
FROM employee, dept WHERE dept.d_no=employee.dept_no;
执行结果如下:
SELECT e_no, e_name, dept_no, d_name,d_locationFROM employee, dept WHERE dept.d_no=employee.dept_no;
+------+----------+------------------+------------------+-------------+
| e_no | e_name | dept_no | d_name | d_location |
+------+------------+----------------+--------------------+------------+
| 1001 | SMITH | 20 | RESEARCH | BeiJing |
| 1002 | ALLEN | 30 | SALES | ShenZhen |
| 1003 | WARD | 30 | SALES | ShenZhen |
| 1004 | JONES | 20 | RESEARCH | BeiJing |
| 1005 | MARTIN | 30 | SALES | ShenZhen |
| 1006 | BLAKE | 30 | SALES | ShenZhen |
| 1007 | CLARK | 10 | ACCOUNTING | ShangHai |
| 1008 | SCOTT | 20 | RESEARCH | BeiJing |
| 1009 | KING | 10 | ACCOUNTING | ShangHai |
| 1010 | TURNER | 30 | SALES | ShenZhen |
| 1011 | ADAMS | 20 | RESEARCH | BeiJing |
| 1012 | JAMES | 30 | SALES | ShenZhen |
+------+---------------+------------+-------------------+-----------------+
12 rows in set (0.00 sec)
- 在employee表中,计算每个部门各有多少名员工。
SELECT dept_no, COUNT(*) FROM employee GROUP BY dept_no;
执行结果如下:
SELECT dept_no, COUNT(*) FROM employee GROUP BY dept_no;
+---------+----------+
| dept_no | COUNT(*) |
+---------+----------+
| 10 | 2 |
| 20 | 4 |
| 30 | 6 |
+---------+----------+
3 rows in set (0.00 sec)
- 在employee表中,计算不同类型职工的总工资数。
SELECT e_job, SUM(e_salary) FROM employee GROUP BY e_job;
执行结果如下:
SELECT e_job, SUM(e_salary) FROM employee GROUP BY e_job;
+---------------+-------------------------+
| e_job | SUM(e_salary) |
+-----------------+----------------------+
| ANALYST | 3000 |
| CLERK | 2850 |
| MANAGER | 8275 |
| PRESIDENT | 5000 |
| SALESMAN | 5600 |
+-------------------+-----------------------+
5 rows in set (0.00 sec)
- 在employee表中,计算不同部门的平均工资。
SELECT dept_no, AVG(e_salary) FROM employee GROUP BY dept_no;
执行结果如下:
SELECT dept_no, AVG(e_salary) FROM employee GROUP BY dept_no;
+---------+-----------------+
| dept_no | AVG(e_salary) |
+---------+----------------+
| 10 | 3725.0000 |
| 20 | 1968.7500 |
| 30 | 1566.6667 |
+---------+---------------+
3 rows in set (0.00 sec)
- 在employee表中,查询工资低于1500的员工信息。
SELECT * FROM employee WHERE e_salary < 1500;
执行过程如下:
SELECT * FROM employee WHERE e_salary < 1500;
+------+--------+----------+---------+----------+---------+------------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary| hireDate |
+------+--------+----------+---------+----------+---------+------------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12 |
| 1003 | WARD | f | 30 | SALESMAN | 1250 | 2003-05-12 |
| 1005 | MARTIN | m | 30 | SALESMAN | 1250 | 2001-06-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
| 1012 | JAMES | m | 30 | CLERK | 950 | 2008-06-15 |
+------+--------+----------+---------+----------+---------+------------+
5 rows in set (0.00 sec)
- 在employee表中,将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列。
SELECT e_name,dept_no, e_salary FROM employee ORDER BY dept_no DESC, e_salary DESC;
执行过程如下:
SELECT e_name,dept_no, e_salaryFROM employee ORDER BY dept_no DESC, e_salary DESC;
+------------+--------------+-----------+
| e_name | dept_no | e_salary |
+-------------+-------------+------------+
| BLAKE | 30 | 2850 |
| ALLEN | 30 | 1600 |
| TURNER | 30 | 1500 |
| WARD | 30 | 1250 |
| MARTIN | 30 | 1250 |
| JAMES | 30 | 950 |
| SCOTT | 20 | 3000 |
| JONES | 20 | 2975 |
| ADAMS | 20 | 1100 |
| SMITH | 20 | 800 |
| KING | 10 | 5000 |
| CLARK | 10 | 2450 |
+------------+--------------+--------------+
12 rows in set (0.00 sec)
- 在employee表中,查询员工姓名以字母’A’或’S’开头的员工的信息。
SELECT * FROM employee WHERE e_name REGEXP '^[as]';
执行过程如下:
SELECT * FROM employee WHERE e_name REGEXP '^[as]';
+------+------------+----------------+--------------+---------------+------------+-------------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hireDate |
+------+-------------+----------------+-------------+----------------+-------------+------------+
| 1001 | SMITH | m | 20 | CLERK | 800 | 2005-11-12|
| 1002 | ALLEN | f | 30 | SALESMAN | 1600 | 2003-05-12 |
| 1008 | SCOTT | m | 20 | ANALYST | 3000 | 2003-05-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05|
+------+--------------+-------------------+----------+------------------+-----------+--------------+
4 rows in set (0.00 sec)
- 在employee表中,查询到目前为止,工龄大于等于10年的员工信息。
SELECT * FROM employee where YEAR(CURDATE()) -YEAR(hireDate) >= 10;
执行过程如下:
SELECT * FROM employee where YEAR(CURDATE()) -YEAR(hireDate) >= 10;
+------+------------+--------------+------------+--------------------+---------------+-----------+
| e_no | e_name | e_gender | dept_no | e_job | e_salary | hireDate |
+------+-------------+--------------+-------------+-------------------+----------------+-----------+
| 1004 | JONES | m | 20 | MANAGER | 2975 | 1998-05-18 |
| 1005 | MARTIN | m | 30 | SALESMAN | 1250 | 2001-06-12 |
| 1006 | BLAKE | f | 30 | MANAGER | 2850 | 1997-02-15 |
| 1009 | KING | f | 10 | PRESIDENT | 5000 | 1995-01-01 |
| 1010 | TURNER | f | 30 | SALESMAN | 1500 | 1997-10-12 |
| 1011 | ADAMS | m | 20 | CLERK | 1100 | 1999-10-05 |
+------+---------------+--------------+--------------+-----------------+---------------+--------------+
本文有关mysql数据表查询的命令,以及小练习已经介绍完了,明天再见!!
😆想要了解更多内容请点击“练小杰的CSDN”
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!