设为首页 收藏本站
查看: 1036|回复: 0

[经验分享] mysql数据操作

[复制链接]

尚未签到

发表于 2018-10-4 08:26:32 | 显示全部楼层 |阅读模式
  一、插入数据INSERT
1.插入完整数据(顺序插入)  语法一:
  INSERT INTO 表名(字段1, 字段2, 字段3…字段n) VALUES(值1, 值2, 值3…值n);
  语法二:
  INSERT INTO 表名 VALUES(值1, 值2, 值3…值n);
  2.指定字段插入数据
  语法:
  INSERT INTO 表名(字段1, 字段2, 字段3…) VALUES(值1, 值2, 值3…);
  3.插入多条记录
  语法:
  INSERT INTO 表名 VALUES
  (值1, 值2, 值3…值n),
  (值1, 值2, 值3…值n),
  (值1, 值2, 值3…值n);
  4.插入查询结果
  语法:
  INSERT INTO 表名(字段1, 字段2, 字段3…字段n)
  SELECT(字段1, 字段2, 字段3…字段n) FROM 表2
  WHERE …;
  二、更新数据UPDATE
  语法:
  UPDATE 表名 SET
  字段1=值1,
  字段2=值2,
  WHERE CONDITION;
  示例:
  UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
  三、删除数据DELETE
  语法:
  DELETE FROM 表名
  WHERE CONITION;
  示例:
  DELETE FROM mysql.user
  WHERE password=’’;
  四、权限管理
  #创建用户

  create user 'egon'@'1.1.1.1'>
  create user 'egon'@'192.168.1.%'>
  create user 'egon'@'%'>  #授权:对文件夹,对文件,对文件某一字段的权限
  查看帮助:help grant
  常用权限有:select,update,alter,delete
  all可以代表除了grant之外的所有权限
#针对所有库的授权:*.*  
grant select on *.* to 'li'@'localhost' identified by '123'; #只在user表中可以查到li用户的select权限被设置为Y
  
#针对某一数据库:db1.*
  
grant select on db1.* to 'wang'@'%' identified by '123'; #只在db表中可以查到wang用户的select权限被设置为Y
  
#针对某一个表:db1.t1
  
grant select on db1.t1 to 'tom'@'%' identified by '123';  #只在tables_priv表中可以查到tom用户的select权限
  
#针对某一个字段:
  
mysql> select * from t3;
  
+------+-------+------+
  
| id   | name  | age  |
  
+------+-------+------+
  
|    1 | egon1 |   18 |
  
|    2 | egon2 |   19 |
  
|    3 | egon3 |   29 |
  
+------+-------+------+
  
grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '123';
  
#可以在tables_priv和columns_priv中看到相应的权限
  
mysql> select * from tables_priv where user='egon4'\G
  
mysql> select * from columns_priv where user='egon4'\G
  
#删除权限
  
revoke select on db1.* to 'alex'@'%';
  五、mysql单表查询
  1、单表查询的语法
  SELECT 字段1,字段2... FROM 表名
  WHERE 条件
  GROUP BY field
  HAVING 筛选
  ORDER BY field
  LIMIT 限制条数
  2、关键字的执行优先级
  from                #找到表
  where               #拿着where指定的约束条件,去文件/表中取出一条条记录
  group by           #将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
  having             #将分组的结果进行having过滤
  select             #执行select
  distinct           #去重
  order by           #将结果按条件排序
  limit              #限制结果的显示条数
  3、简单查询
#创建表  
create database company;
  
use company;
  
create table employee(
  
id int not null unique auto_increment,
  
name varchar(20) not null,
  
sex enum('male','female') not null default 'male',
  
age int(3) unsigned not null default 28,
  
hire_date date not null,
  
post varchar(50),
  
post_comment varchar(100),
  
salary double(15,2),
  
office int,
  
depart_id int
  
);
  
#插入记录三个部门:教学,销售,运营
  
insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
  
('wang','male',18,'20170301','teacher',7300.33,401,1),
  
('li','male',78,'20150302','teacher',1000000.31,401,1),
  
('jim','male',81,'20130305','teacher',8300,401,1),
  
('zhao','male',73,'20140701','teacher',3500,401,1),
  
('liwenzhou','male',28,'20121101','teacher',2100,401,1),
  
('jingliyang','female',18,'20110211','teacher',9000,401,1),
  
('jinxin','male',18,'19000301','teacher',30000,401,1),
  
('成龙','male',48,'20101111','teacher',10000,401,1),
  
('歪歪','female',48,'20150311','sale',3000.13,402,2),
  
('丫丫','female',38,'20101101','sale',2000.35,402,2),
  
('丁丁','female',18,'20110312','sale',1000.37,402,2),
  
('星星','female',18,'20160513','sale',3000.29,402,2),
  
('格格','female',28,'20170127','sale',4000.33,402,2),
  
('张野','male',28,'20160311','operation',10000.13,403,3),
  
('程咬金','male',18,'19970312','operation',20000,403,3),
  
('程咬银','female',18,'20130311','operation',19000,403,3),
  
('程咬铜','male',18,'20150411','operation',18000,403,3),
  
('程咬铁','female',18,'20140512','operation',17000,403,3)
  
;
  
+----+------------+--------+-----+------------+-----------+--------------+------------+--------+-----------+
  
| id | name       | sex    | age | hire_date  | post      | post_comment | salary     | office | depart_id |
  
+----+------------+--------+-----+------------+-----------+--------------+------------+--------+-----------+
  
|  1 | wang       | male   |  18 | 2017-03-01 | teacher   | NULL         |    7300.33 |    401 |         1 |
  
|  2 | li         | male   |  78 | 2015-03-02 | teacher   | NULL         | 1000000.31 |    401 |         1 |
  
|  3 | jim        | male   |  81 | 2013-03-05 | teacher   | NULL         |    8300.00 |    401 |         1 |
  
|  4 | zhao       | male   |  73 | 2014-07-01 | teacher   | NULL         |    3500.00 |    401 |         1 |
  
|  5 | liwenzhou  | male   |  28 | 2012-11-01 | teacher   | NULL         |    2100.00 |    401 |         1 |
  
|  6 | jingliyang | female |  18 | 2011-02-11 | teacher   | NULL         |    9000.00 |    401 |         1 |
  
|  7 | jinxin     | male   |  18 | 1900-03-01 | teacher   | NULL         |   30000.00 |    401 |         1 |
  
|  8 | 成龙       | male   |  48 | 2010-11-11 | teacher   | NULL         |   10000.00 |    401 |         1 |
  
|  9 | 歪歪       | female |  48 | 2015-03-11 | sale      | NULL         |    3000.13 |    402 |         2 |
  
| 10 | 丫丫       | female |  38 | 2010-11-01 | sale      | NULL         |    2000.35 |    402 |         2 |
  
| 11 | 丁丁       | female |  18 | 2011-03-12 | sale      | NULL         |    1000.37 |    402 |         2 |
  
| 12 | 星星       | female |  18 | 2016-05-13 | sale      | NULL         |    3000.29 |    402 |         2 |
  
| 13 | 格格       | female |  28 | 2017-01-27 | sale      | NULL         |    4000.33 |    402 |         2 |
  
| 14 | 张野       | male   |  28 | 2016-03-11 | operation | NULL         |   10000.13 |    403 |         3 |
  
| 15 | 程咬金     | male   |  18 | 1997-03-12 | operation | NULL         |   20000.00 |    403 |         3 |
  
| 16 | 程咬银     | female |  18 | 2013-03-11 | operation | NULL         |   19000.00 |    403 |         3 |
  
| 17 | 程咬铜     | male   |  18 | 2015-04-11 | operation | NULL         |   18000.00 |    403 |         3 |
  
| 18 | 程咬铁     | female |  18 | 2014-05-12 | operation | NULL         |   17000.00 |    403 |         3 |
  
+----+------------+--------+-----+------------+-----------+--------------+------------+--------+-----------+
  
# 简单查询
  
SELECT id, name, sex, age, hire_date, post, post_comment, salary, office, depart_id FROM employee;
  
SELECT * FROM employee;
  
SELECT name, salary FROM employee;
  
# 避免重复DISTINCT
  
SELECT DISTINCT post FROM employee;
  
+-----------+
  
| post      |
  
+-----------+
  
| teacher   |
  
| sale      |
  
| operation |
  
+-----------+
  
# 通过四则运算查询
  
SELECT name, salary * 12 FROM employee;
  
SELECT name, salary * 12 AS Annual_salary FROM employee;
  
SELECT name, salary * 12 Annual_salary FROM employee;
  
+------------+---------------+
  
| name       | Annual_salary |
  
+------------+---------------+
  
| wang       |      87603.96 |
  
| li         |   12000003.72 |
  
| jim        |      99600.00 |
  
| zhao       |      42000.00 |
  
| liwenzhou  |      25200.00 |
  
| jingliyang |     108000.00 |
  
| jinxin     |     360000.00 |
  
| 成龙       |     120000.00 |
  
| 歪歪       |      36001.56 |
  
| 丫丫       |      24004.20 |
  
| 丁丁       |      12004.44 |
  
| 星星       |      36003.48 |
  
| 格格       |      48003.96 |
  
| 张野       |     120001.56 |
  
| 程咬金     |     240000.00 |
  
| 程咬银     |     228000.00 |
  
| 程咬铜     |     216000.00 |
  
| 程咬铁     |     204000.00 |
  
+------------+---------------+
  
# 定义显示格式
  
CONCAT() 函数用于连接字符串
  
SELECT CONCAT('姓名: ', name, '  年薪: ', salary * 12) AS Annual_salary FROM employee;
  
CONCAT_WS() 第一个参数为分隔符
  
SELECT CONCAT_WS(':', name, salary * 12) AS Annual_salary FROM employee;
  
+----------------------+
  
| Annual_salary        |
  
+----------------------+
  
| wang:87603.96        |
  
| li:12000003.72       |
  
| jim:99600.00         |
  
| zhao:42000.00        |
  
| liwenzhou:25200.00   |
  
| jingliyang:108000.00 |
  
| jinxin:360000.00     |
  
| 成龙:120000.00       |
  
| 歪歪:36001.56        |
  
| 丫丫:24004.20        |
  
| 丁丁:12004.44        |
  
| 星星:36003.48        |
  
| 格格:48003.96        |
  
| 张野:120001.56       |
  
| 程咬金:240000.00     |
  
| 程咬银:228000.00     |
  
| 程咬铜:216000.00     |
  
| 程咬铁:204000.00     |
  
+----------------------+
练习:  (1)查出所有员工的名字,薪资,格式为
     
  (2)查出所有的岗位(去掉重复)
  (3)查出所有员工名字,以及他们的年薪,年薪的字段名为annual_year
select concat('    ','') from employee;  
select distinct depart_id from employee;
  
select name,salary*12 annual_salary from employee;
  4、WHERE约束
  # 1:单条件查询
  
SELECT name FROM employee WHERE post = 'sale';
  
# 2:多条件查询
  
SELECT name, salary FROM employee WHERE post = 'teacher' AND salary > 10000;
  
# 3:关键字BETWEEN AND
  
SELECT name, salary FROM employee WHERE salary BETWEEN 10000 AND 20000;
  
SELECT name, salary FROM employee WHERE salary NOT BETWEEN 10000 AND 20000;
  
# 4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)
  
SELECT name, post_comment FROM employee WHERE post_comment IS NULL;
  
SELECT name, post_comment FROM employee WHERE post_comment IS NOT NULL;
  
SELECT name, post_comment FROM employee WHERE post_comment = '';  #注意''是空字符串,不是null
  
ps:
  
    执行
  
    update employee set post_comment = '' where id = 2;
  
    再用上条查看,就会有结果了
  
# 5:关键字IN集合查询
  
SELECT name, salary FROM employee WHERE salary = 3000 OR salary = 3500 OR salary = 4000 OR salary = 9000;
  
SELECT name, salary FROM employee WHERE salary IN(3000, 3500, 4000, 9000);
  
SELECT name, salary FROM employee WHERE salary NOT IN(3000, 3500, 4000, 9000);
  
# 6:关键字LIKE模糊查询
  
通配符’ % ’
  
SELECT * FROM employee WHERE name LIKE 'eg%';
  
通配符’_’
  
SELECT * FROM employee WHERE name LIKE 'al__';
  练习:
  (1)查看岗位是teacher的员工姓名、年龄
  (2)查看岗位是teacher且年龄大于30岁的员工姓名、年龄
  (3)查看岗位是teacher且薪资在9000-1000范围内的员工姓名、年龄、薪资
  (4)查看岗位描述不为NULL的员工信息
  (5)查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资
  (6)查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资
  (7)查看岗位是teacher且名字是jin开头的员工姓名、年薪
select name,age from employee where post = 'teacher';  
select name,age from employee where post='teacher' and age > 30;
  
select name,age,salary from employee where post='teacher' and salary between 9000 and 10000;
  
select * from employee where post_comment is not null;
  
select name,age,salary from employee where post='teacher' and salary in (10000,9000,30000);
  
select name,age,salary from employee where post='teacher' and salary not in (10000,9000,30000);
  
select name,salary*12 from employee where post='teacher' and name like 'jin%';
  
mysql> select name,salary*12 as year_salary from employee where post='teacher' and name like 'jin%';
  5、分组查询:GROUP BY
  (1)GROUP BY
  单独使用GROUP BY关键字分组
  SELECT post FROM employee GROUP BY post;
  注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数
  GROUP BY关键字和GROUP_CONCAT()函数一起使用
  SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;                 #按照岗位分组,并查看组内成员名
  SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;
  GROUP BY与聚合函数一起使用
  select post,count(id) as count from employee group by post;                 #按照岗位分组,并查看每个组有多少人
  如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义
  多条记录之间的某个字段值相同,该字段通常用来作为分组的依据
  (2)聚合函数
  #强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组
  示例:
  SELECT COUNT(*) FROM employee;
  SELECT COUNT(*) FROM employee WHERE depart_id=1;
  SELECT MAX(salary) FROM employee;
  SELECT MIN(salary) FROM employee;
  SELECT AVG(salary) FROM employee;
  SELECT SUM(salary) FROM employee;
  SELECT SUM(salary) FROM employee WHERE depart_id=3;
  练习:
  (1)查询岗位名以及岗位包含的所有员工名字
  (2)查询岗位名以及各岗位内包含的员工个数
  (3)查询公司内男员工和女员工的个数
  (4)查询岗位名以及各岗位的平均薪资
  (5)查询岗位名以及各岗位的最高薪资
  (6)查询岗位名以及各岗位的最低薪资
  (7)查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
mysql> select post,group_concat(name) from employee group by post;  
mysql> select post,count(id) from employee group by post;
  
mysql> select sex,count(id) from employee group by sex;
  
mysql> select post,avg(salary) from employee group by post;
  
mysql> select post,max(salary) from employee group by post;
  
mysql> select post,min(salary) from employee group by post;
  
mysql> select sex,avg(salary) from employee group by sex;
  6、HAVING过滤
  HAVING与WHERE不一样的地方在于!!!!!!
  #!!!执行优先级从高到低:where > group by > having
  #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
  #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
  练习:
  1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
  2. 查询各岗位平均薪资大于10000的岗位名、平均工资
  3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
mysql> select post,group_concat(name),count(id) from employee group by post having count(id) < 2;  
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000;
  
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 and avg(salary)  select * from employee ORDER BY age asc,hire_date desc;  
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) asc;
  
mysql> select post,avg(salary) from employee group by post having avg(salary) > 10000 order by avg(salary) desc;
  8、限制查询的记录数:LIMIT
  SELECT * FROM employee ORDER BY salary DESC LIMIT 3;  # 默认初始位置为0
  
SELECT * FROM employee ORDER BY salary DESC LIMIT 0, 5;  # 从第0开始,即先查询出第一条,然后包含这一条在内往后查5条
  
SELECT * FROM employee ORDER BY salary DESC LIMIT 5, 5;  # 从第5开始,即先查询出第6条,然后包含这一条在内往后查5条
  练习:分页显示,每页5条
mysql> select * from  employee limit 0,5;              #显示第1到5条记录  
mysql> select * from  employee limit 5,5;              #显示第5到10条记录
  
mysql> select * from  employee limit 10,5;             #显示第10到15条记录
  9、使用正则表达式查询
  SELECT * FROM employee WHERE name REGEXP '^ale';
  
SELECT * FROM employee WHERE name REGEXP 'on$';
  
SELECT * FROM employee WHERE name REGEXP 'm{2}';
  小结:对字符串匹配的方式
  WHERE name = 'li';
  WHERE name LIKE 'yua%';
  WHERE name REGEXP 'on$';
  练习:
  查看所有员工中名字是jin开头,n或者g结果的员工信息
  select * from employee where name regexp '^jin.*[gn]$';
  六、mysql多表查询
  1、建表
  create table department(id int,name varchar(20));
  
create table employee(
  
id int primary key auto_increment,
  
name varchar(20),
  
sex enum('male','female') not null default 'male',
  
age int,
  
dep_id int
  
);
  
#插入数据
  
insert into department values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营');
  
insert into employee(name,sex,age,dep_id) values
  
('egon','male',18,200),
  
('alex','female',48,201),
  
('wupeiqi','male',38,201),
  
('yuanhao','female',28,202),
  
('liwenzhou','male',18,200),
  
('jingliyang','female',18,204)
  
;
  2、多表连接查询
  (1)交叉连接:不适用任何匹配条件。生成笛卡尔积
mysql> select * from department;  
+------+--------------+
  
| id   | name         |
  
+------+--------------+
  
|  200 | 技术         |
  
|  201 | 人力资源     |
  
|  202 | 销售         |
  
|  203 | 运营         |
  
+------+--------------+
  
mysql> select * from employee;
  
+----+------------+--------+------+--------+
  
| id | name       | sex    | age  | dep_id |
  
+----+------------+--------+------+--------+
  
|  1 | egon       | male   |   18 |    200 |
  
|  2 | alex       | female |   48 |    201 |
  
|  3 | wupeiqi    | male   |   38 |    201 |
  
|  4 | yuanhao    | female |   28 |    202 |
  
|  5 | liwenzhou  | male   |   18 |    200 |
  
|  6 | jingliyang | female |   18 |    204 |
  
+----+------------+--------+------+--------+
  
mysql> select * from employee,department;
  (2)内连接:只连接匹配的行
  #找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
  #department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来
mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee inner join department on employee.dep_id=department.id;  
+----+-----------+------+--------+--------------+
  
| id | name      | age  | sex    | name         |
  
+----+-----------+------+--------+--------------+
  
|  1 | egon      |   18 | male   | 技术         |
  
|  2 | alex      |   48 | female | 人力资源     |
  
|  3 | wupeiqi   |   38 | male   | 人力资源     |
  
|  4 | yuanhao   |   28 | female | 销售         |
  
|  5 | liwenzhou |   18 | male   | 技术         |
  
+----+-----------+------+--------+--------------+
  
mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee,department where employee.dep_id=department.id;
  (3)外链接之左连接:优先显示左表全部记录
  #以左表为准,即找出所有员工信息,当然包括没有部门的员工
  #本质就是:在内连接的基础上增加左边有右边没有的结果
mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;  
+----+------------+--------------+
  
| id | name       | depart_name  |
  
+----+------------+--------------+
  
|  1 | egon       | 技术         |
  
|  5 | liwenzhou  | 技术         |
  
|  2 | alex       | 人力资源     |
  
|  3 | wupeiqi    | 人力资源     |
  
|  4 | yuanhao    | 销售         |
  
|  6 | jingliyang | NULL         |
  
+----+------------+--------------+
  (4)外链接之右连接:优先显示右表全部记录
  #以右表为准,即找出所有部门信息,包括没有员工的部门
  #本质就是:在内连接的基础上增加右边有左边没有的结果
mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;  
+------+-----------+--------------+
  
| id   | name      | depart_name  |
  
+------+-----------+--------------+
  
|    1 | egon      | 技术         |
  
|    2 | alex      | 人力资源     |
  
|    3 | wupeiqi   | 人力资源     |
  
|    4 | yuanhao   | 销售         |
  
|    5 | liwenzhou | 技术         |
  
| NULL | NULL      | 运营         |
  
+------+-----------+--------------+
  (5)全外连接:显示左右两个表全部记录
  全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
  #注意:mysql不支持全外连接 full JOIN
  #强调:mysql可以使用此种方式间接实现全外连接
select * from employee left join department on employee.dep_id = department.id  
union
  
select * from employee right join department on employee.dep_id = department.id
  
;
  
+------+------------+--------+------+--------+------+--------------+
  
| id   | name       | sex    | age  | dep_id | id   | name         |
  
+------+------------+--------+------+--------+------+--------------+
  
|    1 | egon       | male   |   18 |    200 |  200 | 技术         |
  
|    5 | liwenzhou  | male   |   18 |    200 |  200 | 技术         |
  
|    2 | alex       | female |   48 |    201 |  201 | 人力资源     |
  
|    3 | wupeiqi    | male   |   38 |    201 |  201 | 人力资源     |
  
|    4 | yuanhao    | female |   28 |    202 |  202 | 销售         |
  
|    6 | jingliyang | female |   18 |    204 | NULL | NULL         |
  
| NULL | NULL       | NULL   | NULL |   NULL |  203 | 运营         |
  
+------+------------+--------+------+--------+------+--------------+
  
#注意 union与union all的区别:union会去掉相同的纪录
  3、符合条件连接查询
  #示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门
  
select employee.name,department.name from employee inner join department on employee.dep_id = department.id where age > 25;
  
+---------+--------------+
  
| name    | name         |
  
+---------+--------------+
  
| alex    | 人力资源     |
  
| wupeiqi | 人力资源     |
  
| yuanhao | 销售         |
  
+---------+--------------+
  
#示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示
  
select employee.id,employee.name,employee.age,department.name from employee,department where employee.dep_id = department.id and age > 25 order by age asc;
  
+----+---------+------+--------------+
  
| id | name    | age  | name         |
  
+----+---------+------+--------------+
  
|  4 | yuanhao |   28 | 销售         |
  
|  3 | wupeiqi |   38 | 人力资源     |
  
|  2 | alex    |   48 | 人力资源     |
  
+----+---------+------+--------------+
  4、子查询
  #1:子查询是将一个查询语句嵌套在另一个查询语句中。
  #2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。
  #3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
  #4:还可以包含比较运算符:= 、 !=、> 、 25);
  
#查看技术部员工姓名
  
select name from employee where dep_id in (select id from department where name='技术');
  
#查看不足1人的部门名(子查询得到的是有人的部门id)
  
select name from department where id not in (select distinct dep_id from employee);
  (2)带比较运算符的子查询
  #比较运算符:=、!=、>、>=、 (select avg(age) from emp);
  
#查询大于部门内平均年龄的员工名、年龄
  
select t1.name,t1.age from emp t1
  
inner join
  
(select dep_id,avg(age) avg_age from emp group by dep_id) t2 on t1.dep_id = t2.dep_id where t1.age > t2.avg_age;
  (3)带EXISTS关键字的子查询
  EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。
  而是返回一个真假值。True或False
  当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
#department表中存在dept_id=203,Ture  
mysql> select * from employee where exists (select id from department where id=200);
  
#department表中存在dept_id=205,False
  
mysql> select * from employee where exists (select id from department where id=204);



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-611664-1-1.html 上篇帖子: mysql范式简单总结 下篇帖子: MySQL Replication常见错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表