mysql 查询操作实例

mysql 查询操作实例

前提

先建2个表

# 创建部门表
drop table if exists dept;
create table dept(
d_no int not null primary key auto_increment,
d_name varchar(50),
d_location varchar(100)
);

# 创建员工表
drop table if exists 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)
);

insert into dept values
(10, 'accounting', 'shanghai'),
(20, 'research', 'beijing'),
(30, 'sales', 'shenzhen'),
(40, 'operations', 'fujian');

insert into employee values
(1001, 'smith', 'm', 20, 'clerk', 800, '2005-11-12'),
(1002, 'allen', 'f', 30, 'salesman', 1600, '2003-5-12'),
(1003, 'ward', 'f', 30, 'salesman', 1250, '2003-5-12'),
(1004, 'jones', 'm', 20, 'manager', 2975, '1998-5-18'),
(1005, 'martin', 'm', 30, 'salesman', 1250, '2001-6-12'),
(1006, 'blake', 'f', 30, 'manager', 2850, '1997-2-15'),
(1007, 'clark', 'm', 10, 'manager', 2450, '2002-9-12'),
(1008, 'scott', 'm', 20, 'analyst', 3000, '2003-5-12'),
(1009, 'king', 'f', 10, 'president', 5000, '1995-1-1'),
(1010, 'turner', 'f', 30, 'salesman', 1500, '1997-10-12'),
(1011, 'adams', 'm', 20, 'clerk', 1100, '1999-10-5'),
(1012, 'james', 'f', 30, 'clerk', 950, '2008-6-15');

综合查询


# 1)查询所有女员工进入公司多少年
mysql> select sum(year(curdate())-year(hiredate)) from employee where e_gender = 'f';
+-------------------------------------+
| sum(year(curdate())-year(hiredate)) |
+-------------------------------------+
|                                 129 |
+-------------------------------------+
1 row in set (0.00 sec)


# 2)使用limit查询从第3条记录开始到第6条记录
mysql> select * from employee limit 2,4;
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 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 |
+------+--------+----------+---------+----------+----------+------------+
4 rows in set (0.00 sec)


# 3)查询销售人员最低工资
mysql> select min(e_salary) from employee where e_job='salesman';
+---------------+
| min(e_salary) |
+---------------+
|          1250 |
+---------------+
1 row in set (0.00 sec)

# 4)查询名字以字母n或者s结尾的记录
mysql> select * from employee where e_name regexp '[ns]$';
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1002 | allen  | f        |      30 | salesman |     1600 | 2003-05-12 |
| 1004 | jones  | m        |      20 | manager  |     2975 | 1998-05-18 |
| 1005 | martin | m        |      30 | salesman |     1250 | 2001-06-12 |
| 1011 | james  | m        |      20 | clerk    |     1100 | 1999-10-05 |
| 1012 | james  | f        |      30 | clerk    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+
5 rows in set (0.00 sec)

# 5)查询在beijing工作的员工的姓名和职务
mysql> select e_name,e_job from employee where dept_no in (select d_no from dept where d_location = 'beijing');
+--------+---------+
| e_name | e_job   |
+--------+---------+
| smith  | clerk   |
| jones  | manager |
| scott  | analyst |
| james  | clerk   |
+--------+---------+
4 rows in set (0.00 sec)

# 6)使用左连接查询employee表和dept表

mysql> select * from employee left outer join dept on employee.dept_no = dept.d_no;
+------+--------+----------+---------+-----------+----------+------------+------+------------+------------+
| e_no | e_name | e_gender | dept_no | e_job     | e_salary | hiredate   | d_no | d_name     | d_location |
+------+--------+----------+---------+-----------+----------+------------+------+------------+------------+
| 1001 | smith  | m        |      20 | clerk     |      800 | 2005-11-12 |   20 | research   | beijing    |
| 1002 | allen  | f        |      30 | salesman  |     1600 | 2003-05-12 |   30 | sales      | shenzhen   |
| 1003 | ward   | f        |      30 | salesman  |     1250 | 2003-05-12 |   30 | sales      | shenzhen   |
| 1004 | jones  | m        |      20 | manager   |     2975 | 1998-05-18 |   20 | research   | beijing    |
| 1005 | martin | m        |      30 | salesman  |     1250 | 2001-06-12 |   30 | sales      | shenzhen   |
| 1006 | blake  | f        |      30 | manager   |     2850 | 1997-02-15 |   30 | sales      | shenzhen   |
| 1007 | clark  | m        |      10 | manager   |     2450 | 2002-09-12 |   10 | accounting | shanghai   |
| 1008 | scott  | m        |      20 | analyst   |     3000 | 2003-05-12 |   20 | research   | beijing    |
| 1009 | king   | f        |      10 | president |     5000 | 1995-01-01 |   10 | accounting | shanghai   |
| 1010 | turner | f        |      30 | salesman  |     1500 | 1997-10-12 |   30 | sales      | shenzhen   |
| 1011 | james  | m        |      20 | clerk     |     1100 | 1999-10-05 |   20 | research   | beijing    |
| 1012 | james  | f        |      30 | clerk     |      950 | 2008-06-15 |   30 | sales      | shenzhen   |
+------+--------+----------+---------+-----------+----------+------------+------+------------+------------+
12 rows in set (0.00 sec)


# 7)查询所有2001~2005年入职的员工信息,查询部门编号为20和30的员工信息并使用union 合并2个查询结果

mysql> select * from employee where year(hiredate) between '2001' and '2005' union all select * from employee where dept_no  = 20 or dept_no = 30;
+------+--------+----------+---------+----------+----------+------------+
| 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 |
| 1008 | scott  | m        |      20 | analyst  |     3000 | 2003-05-12 |
| 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 |
| 1008 | scott  | m        |      20 | analyst  |     3000 | 2003-05-12 |
| 1010 | turner | f        |      30 | salesman |     1500 | 1997-10-12 |
| 1011 | james  | m        |      20 | clerk    |     1100 | 1999-10-05 |
| 1012 | james  | f        |      30 | clerk    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+
16 rows in set (0.01 sec)


# 8)使用like 查询员工姓名包含a字母的记录
mysql> select * from employee where e_name like '%a%';
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 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 |
| 1006 | blake  | f        |      30 | manager  |     2850 | 1997-02-15 |
| 1007 | clark  | m        |      10 | manager  |     2450 | 2002-09-12 |
| 1011 | james  | m        |      20 | clerk    |     1100 | 1999-10-05 |
| 1012 | james  | f        |      30 | clerk    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+
7 rows in set (0.00 sec)

# 9)使用regexp 查询员工姓名包含t c m 3个字母任意一个的记录
mysql> select * from employee where e_name regexp '[tcm]';
+------+--------+----------+---------+----------+----------+------------+
| e_no | e_name | e_gender | dept_no | e_job    | e_salary | hiredate   |
+------+--------+----------+---------+----------+----------+------------+
| 1001 | smith  | m        |      20 | clerk    |      800 | 2005-11-12 |
| 1005 | martin | m        |      30 | salesman |     1250 | 2001-06-12 |
| 1007 | clark  | m        |      10 | manager  |     2450 | 2002-09-12 |
| 1008 | scott  | m        |      20 | analyst  |     3000 | 2003-05-12 |
| 1010 | turner | f        |      30 | salesman |     1500 | 1997-10-12 |
| 1011 | james  | m        |      20 | clerk    |     1100 | 1999-10-05 |
| 1012 | james  | f        |      30 | clerk    |      950 | 2008-06-15 |
+------+--------+----------+---------+----------+----------+------------+
7 rows in set (0.01 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值