我在广州学 Mysql 系列——数据表查询命令详解

news/2024/12/25 11:27:08/

ℹ️大家好,我是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 子句可以方便地对查询结果进行单列或多列排序。
  • 通过指定 ASCDESC,可以控制排序的顺序。
  • 最后再结合 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关键字的子查询

ANYSOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。

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_noe_namee_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”
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!


http://www.ppmy.cn/news/1557981.html

相关文章

互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;无人机技术已经广泛应用于各个领域&#xff0c;为我们的生活带来了诸多便利。而在动植物保护工作中&#xff0c;无人机的应用更是为这一领域注入了新的活力。EasyDSS&#xff0c;作为一款集视频处理、分发、存储于一体的综…

谷歌开发者工具 - 控制台篇

Chrome DevTools - Console控制台篇 一、官网二、主要用途三、控制台篇1.JavaScript/浏览器消息记录&#xff08;1&#xff09;演示效果 / 两种记录状态&#xff08;2&#xff09;显示导致调用的堆栈轨迹 2.过滤消息&#xff08;1&#xff09;按日志级别过滤&#xff08;2&…

计算机网络 - HTTP 协议和万维网

基本概念 万维网 (World Wide Web, WWW) 定义&#xff1a;一个大规模的分布式信息系统&#xff0c;由全球范围内无数个网络站点和网页组成特点&#xff1a;基于超文本技术&#xff0c;支持多媒体内容的展示和交互URL (Uniform Resource Locator) 定义&#xff1a;统一资源定位…

Python fastapi模块入门介绍(基本介绍 unicorn模块 异步函数 FastAPI类 SwaggerUI)

文章目录 基本介绍安装方法必要依赖uvicorn异步函数FastAPI类Swagger UI 基本介绍 fastapi 是Python中一个用于构建Web应用程序的现代框架&#xff0c;并且支持自动生成OpenAPI文档&#xff0c;可以快速开发API。 安装方法 pip install fastapi必要依赖uvicorn 基本介绍&am…

web移动 第四章

B站《前端Web开发HTML5CSS3移动web视频教程》第十五天课程学习&#xff1a;响应式网页 一、媒体查询 media(媒体样式) {选择器{css样式}}媒体特性&#xff1a; max-width min-width 1.书写顺序 因为css样式有层叠性&#xff0c;所以书写的时候要遵循下面的顺序 min-width&a…

企业数字化转型加速度,Yeeco平台先行筑牢转型底座

在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业数字化转型已成为提升竞争力、实现可持续发展的必由之路。然而&#xff0c;面对市场上琳琅满目的数字化平台产品&#xff0c;企业在选型时往往陷入困境。 众多的选择看似提供了丰富的可能性&#xff0c;但也带来了诸多难题&…

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…

【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:F5 BIG-IP Next Central Manager SQL注入漏洞漏洞编号:CVE-2024-26026漏洞威胁等级:超危影响范围:BIG-IP Next Central Manage…