目录
- 一、用户管理
- 二、权限管理
- 三、复制表结构和数据
- 四、数据库操作
- 五、数据表操作
- 六、数据表的约束
- 七、数据表插入数据
- 十、更新数据
- 八、删除数据
- 九、简单查询数据
- 十、函数
- 十一、条件查询
- 十二、别名设置
- 十三、表的关联
- 十四、多表连接查询
- 十五、子查询
一、用户管理
1、创建用户
#三种创建用户方式
create user user01@'192.168.112.%' identified by '123';
grant select,update,delete,insert on *.* to user01@'192.168.112.%' identified by '123';
insert into mysql.user (host,user,password,ssl_cipher,x509_issuer,x509_subject) values('localhost','user02',PASSWORD ('123'),'','','');
2、查看用户
select user,password,host from mysql.user;
3、删除用户
drop user user01@'192.168.112.%';
delete from mysql.user where host='localhost' and user='user01';
4、修改密码
#不知道密码
update mysql.user set password=PASSWORD('1234') where user='root' and host='localhost';
flush privileges;
#知道密码
mysqladmin -uroot -p1234 password 123
二、权限管理
1、赋予权限
grant select,insert,update,delete on *.* to user01@'192.168.112.%' identified by '123' with grant option;
with的参数取值:
- GRANT OPTION:将自己权限授予其它用户。
- MAX_QUERIED_PER_HOUR count:设置每小时最多可执行多少次count查询。
- MAX_UPDATES_PER_HOUR count:设置每小时最多可执行多少次更新。
- MAX_CONNECTIONS_PER_HOUR count:设置每小时最大连接数。
- MAX_USER_CONNECTIONS:设置每个用户最多可以同时建立的连接数量。
2、查看权限
show grants for user01@'192.168.112.%'\G;
3、收回权限
#收回delete权限
revoke delete on *.* from user01@'192.168.112.%';
#收回全部权限
revoke all privileges on *.* from user01@'192.168.112.%';
三、复制表结构和数据
#复制表结构
create table stu like student;
#复制表数据
insert into stu select * from student;
四、数据库操作
1、创建数据库
create database db01;
2、查看该数据库基本信息
show create database db01;
3、删除数据库
drop database db01;
4、查看MySQL中所有的数据库
show databases;
5、将数据库的字符集修改为gbk
alter database db01 charset set gbk;
6、查看当前使用的数据库
select database();
7、切换数据库
use db01;
五、数据表操作
1、创建数据表
#创建数据表前需要指定操作哪个数据库
create table stu (id int,name varchar(255),gender enum('e','f'),birthday date);
2、查看数据表
show tables;
3、查看表的基本信息
show create table stu\G;
4、查看表的字段信息
desc stu;
5、修改表名
alter table stu rename to student;
6、修改字段名
alter table student change sname varchar(100);
7、修改字段数据类型
alter table student modify sname int;
8、增加字段
alter table student add address varchar(50);
9、删除字段
alter table student drop address;
10、删除数据表
drop table student;
六、数据表的约束
约束条件 | 说明 |
---|---|
PRIMARY KEY | 主键约束用于唯一标识对应的记录 |
FOREIGN KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。
1、设置主键约束(primary key)
#第一种方式
create table stu(id int primary key,name varchar(20));
#第二种方式
create table stu(id int,name varchar(20),primary key(id));
2、设置非空约束(not null)
create table stu01(id int not null,name varchar(20) not null);
3、设置默认值约束(default)
create table stu02(id int,name varchar(20),gender varchar(10) default 'male');
4、设置唯一性约束
create table stu03(id int,name varchar(20) unique);
5、设置外键约束
#创建学生表
create table stu04(id int primary key,name varchar(20));
#创建班级表
create table class04 (classid int primary key,studentid int);
#学生表作为主表,班级表作为副表设置外键
alter table class04 add constraint fk_class_studentid foreign key(studentid) references stu04(id);
show create table class04\G;
-
删除外键
alter table class04 drop foreign key fk_class_studentid; show create table class04\G;
1、从表里的外键通常为主表的主键
2、从表里外键的数据类型必须与主表中主键的数据类型一致
3、主表发生变化时应注意主表与从表的数据一致性问题
七、数据表插入数据
1、为表中所有的字段插入字段
#创建stu05表
create table stu05(id int,name varchar(30),age int,gender varchar(30));
#向学生表插入一条学生信息数据
insert into table stu05(id,name,age,gender) values(1,'zhangsan',18,'male');
2、为表中指定字段插入数据
#自己指定插入的字段
insert into stu05 (id,name) values(2,lisi);
3、同时插入多条数据
insert into stu05 (id,name,age,gender) values(3,'lihua',20,'female'),(4,'misaki',21,'male');
十、更新数据
1、UPDATE更新部分数据
#将name为lisi的记录age更新为22并且将gender更新为female
update stu05 set age=22,gender='female' where name='lisi';
2、UPDATE更新为全部数据
#将所有记录的age设置为18
update stu05 set age=20 where 1=1;
八、删除数据
#创建一个stu06表,并插入数据
create table stu06 (id int,name varchar(30),age int,gender varchar(30));
insert into stu06(id,name,age,gender) values(1,'zhangsan',20,'male'),(2,'lisi',21,'female'),(3,'lihua',18,'male'),(4,'wangwu',22,'female');
1、delete部分数据
delete from stu06 where age=18;
2、delete删除全部数据
delete from stu06;
3、truncate删除全部数据
truncate stu06;
truncate和delete的区别
- 执行效率:
TRUNCATE TABLE
通常执行速度更快,因为它不记录每一行的删除操作,而是直接释放存储表数据的数据页,对事务日志的影响较小。DELETE FROM
在没有WHERE子句的情况下会逐行删除数据,这意味着对于大型表,这个过程可能会非常慢,并且会产生大量的事务日志。- 事务日志:
TRUNCATE TABLE
不产生任何回滚记录,所以一旦执行无法恢复被删除的数据。DELETE FROM
会为删除的每一行生成相应的事务日志,如果启用了备份或恢复机制,有可能通过日志恢复被删除的数据。- 自动增长序列重置:
TRUNCATE TABLE
会重置自动增长(AUTO_INCREMENT)序列为初始值。DELETE FROM
则不会影响自动增长序列,其下一个值将基于之前表中的最大值。- 条件删除:
TRUNCATE TABLE
不能有条件地删除数据,它总是删除表中的所有行。DELETE FROM
可以配合WHERE子句进行有条件的选择性删除。- 事务性:
TRUNCATE TABLE
是DDL操作(数据定义语言),一般情况下不可回滚(除非在某些特定的事务上下文中)。DELETE FROM
是DML操作(数据操作语言),发生在事务内部,可以被事务控制并回滚。
九、简单查询数据
测试SQL文件:
https://download.s21i.faiusr.com/23126342/0/0/ABUIABAAGAAgzcXwhQYozuPv2AE?f=world.sql&v=1622942413
1、查询所有字段
#导入
mysql -uroot -p123 < world.sql
#使用world数据库
use world;
#查询所有字段
select * from city;
select * from country;
select * from countrylanguage;
2、查询指定字段
#查询ID,Name,CountryCode字段
select ID,Name,CountryCode from city;
3、从查询结果中过滤重复的数据
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
select distinct Name from city;
4、算术运算符(+-*/)
#以乘法举例,查询city表中的前10条记录,并显示每条记录的城市名称和其对应的人口数量字段值的两倍。
select Name,Population from city limit 10;
select Name,Population*2 from city limit 10;
5、查询数据表中倒数的n条记录
select Name,Population from(select Name,Population from city order by id DESC) as subquery limit 10;
6、查询数据以指定字段升序/降序排列
#升序
select Name,Population from city order by Population ASC;
#降序
select Name,Population from city order by Population DESC;
十、函数
1、聚合函数
MySQL中的聚合函数主要用于处理一组数据并返回单个值,它们常用于数据分析、统计和报表生成。
1.1、count()
#查询city表中有多少行数据
select count(*) from city;
1.2、max()
#查询city表中最大的人口数量
select max(Population) from city;
1.3、min()
select Name,Population from city where Population = (select min(Population) from city);
1.4、sun()
#查询city表中的人口总数
select sum(Population) from city;
#如果指定列类型不是数值类型则计算结果为0
select sum(CountryCode) from city;
1.5、avg()
#查询city表中人口数的平均值
mysql> select avg(Population) from city;
+-----------------+
| avg(Population) |
+-----------------+
| 350468.2236 |
+-----------------+
1 row in set (0.00 sec)
#如果指定列类型不是数值类型则计算结果为0
mysql> select avg(Name) from city;
+-----------+
| avg(Name) |
+-----------+
| 0 |
+-----------+
1 row in set, 4079 warnings (0.00 sec)
2、其他常见函数
字符串函数
CONCAT():连接两个或更多的字符串。
SUBSTRING() 或 SUBSTR():提取字符串的一部分。
LEFT():返回字符串左边的指定长度字符。
RIGHT():返回字符串右边的指定长度字符。
TRIM():去除字符串两边的空白字符。
REPLACE():替换字符串中某一子串为另一子串。
LOWER() 和 UPPER():将字符串转换为小写或大写。
LENGTH() 或 CHAR_LENGTH():返回字符串的长度。
数值函数
ABS():返回数字的绝对值。
RAND():返回随机浮点数。
ROUND():对数字进行四舍五入。
FLOOR():向下取整。
CEILING() 或 CEIL():向上取整。
MOD() 或 MODulo():返回除法的余数。
日期和时间函数
NOW():返回当前日期和时间。
CURDATE() 或 CURRENT_DATE():返回当前日期。
CURTIME() 或 CURRENT_TIME():返回当前时间。
DATE():提取日期部分。
TIME():提取时间部分。
DATEDIFF():计算两个日期之间的天数差。
TIMESTAMPDIFF():计算两个时间戳之间的单位差(如秒、分钟、小时、天等)。
DATE_ADD() 或 DATE_SUB():对日期进行加减操作。
EXTRACT():从日期/时间类型中提取指定部分(如年、月、日、小时等)。
条件判断函数
IF():根据条件返回不同的值。
IFNULL() 或 COALESCE():检查值是否为NULL,如果是则返回替代值。
CASE WHEN THEN ELSE END:提供更复杂的条件分支逻辑。
系统信息函数
USER():返回当前用户。
VERSION():返回MySQL服务器的版本信息。
DATABASE():返回当前数据库的名称。
数学函数
SQRT():计算一个数的平方根。
POW() 或 POWER():计算基数的指数次幂。
LOG() 或 LN():自然对数。
LOG10():以10为底的对数。
PI():返回π(圆周率)的近似值。
集合函数
ANY_VALUE():在GROUP BY语句中避免唯一性问题,返回集合中的任意一个值。
GROUP_CONCAT()(补充说明):将同一组内的多行值连接为一个字符串,可自定义分隔符。
排序与去重函数
DISTINCT:在SELECT语句中去除重复的行。
UNION / UNION ALL:合并多个查询结果,UNION会去除重复行,UNION ALL保留所有行。
分页函数
LIMIT:限制查询结果返回的行数。
OFFSET:跳过前面指定数量的行开始查询结果。
表达式运算符
BETWEEN AND:检查一个值是否在一个范围内。
IN:检查一个值是否在一系列给定值中。
LIKE:模糊匹配字符串。
转换函数
CAST() 或 CONVERT():将一个表达式的类型转换为另一种类型。
FORMAT():格式化数字为带有千位分隔符和指定位数的小数。
JSON函数(MySQL 5.7+)
JSON_EXTRACT():从JSON字符串中提取值。
JSON_ARRAY():创建一个JSON数组。
JSON_OBJECT():创建一个JSON对象。
十一、条件查询
1、使用关系运算符查询
在WHERE中可使用关系运算符进行条件查询,常用的关系运算符如下所示:
关系运算符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
#查询人口数大于等于9555000的城市信息
mysql> select * from city where Population>=9555000;
+------+-----------------+-------------+--------------+------------+
| ID | Name | CountryCode | District | Population |
+------+-----------------+-------------+--------------+------------+
| 206 | São Paulo | BRA | São Paulo | 9968485 |
| 939 | Jakarta | IDN | Jakarta Raya | 9604900 |
| 1024 | Mumbai (Bombay) | IND | Maharashtra | 10500000 |
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 2331 | Seoul | KOR | Seoul | 9981619 |
+------+-----------------+-------------+--------------+------------+
5 rows in set (0.00 sec)
2、使用IN关键字查询
IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。
#查询城市名为'Shanghai'以及'Hangzhou'的信息
mysql> select * from city where Name in ('Shanghai','Hangzhou');
+------+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------+------------+
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 1905 | Hangzhou | CHN | Zhejiang | 2190500 |
+------+----------+-------------+----------+------------+
2 rows in set (0.00 sec)
3、使用BETWEEN AND关键字查询
#查询人口数在8555000到10000000之间的城市信息
mysql> select * from city where Population between 8555000 and 10000000;
+------+-------------------+-------------+------------------+------------+
| ID | Name | CountryCode | District | Population |
+------+-------------------+-------------+------------------+------------+
| 206 | São Paulo | BRA | São Paulo | 9968485 |
| 939 | Jakarta | IDN | Jakarta Raya | 9604900 |
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 2331 | Seoul | KOR | Seoul | 9981619 |
| 2515 | Ciudad de México | MEX | Distrito Federal | 8591309 |
| 2822 | Karachi | PAK | Sindh | 9269265 |
| 3357 | Istanbul | TUR | Istanbul | 8787958 |
+------+-------------------+-------------+------------------+------------+
7 rows in set (0.00 sec)
4、使用AND关键字查询
#查询城市人口大于8555000且Countrycode为'CHN'的城市信息
mysql> select * from city where Population>8555000 and Countrycode='CHN';
+------+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------+------------+
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
+------+----------+-------------+----------+------------+
1 row in set (0.00 sec)
5、使用OR关键字查询
在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来
select * from country where GNP>10000 or Population>82555000;
6、使用LIKE关键字查询
6.1、普通字符串
#查询Name中与'Shanghai'匹配的城市信息
mysql> select * from city where Name like 'Shanghai';
+------+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------+------------+
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
+------+----------+-------------+----------+------------+
1 row in set (0.00 sec)
6.2、含有%通配的字符串
#查询城市名以hai结尾的记录
mysql> select * from city where Name like '%hai';
+------+----------+-------------+----------------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------------+------------+
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 2022 | Wuhai | CHN | Inner Mongolia | 264081 |
| 2114 | Zhuhai | CHN | Guangdong | 164747 |
| 2174 | Weihai | CHN | Shandong | 128888 |
| 2203 | Beihai | CHN | Guangxi | 112673 |
| 2246 | Linhai | CHN | Zhejiang | 90870 |
+------+----------+-------------+----------------+------------+
6 rows in set (0.00 sec)
#查询城市名以Hang开头的记录
mysql> select * from city where Name like 'Hang%';
+------+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------+------------+
| 1905 | Hangzhou | CHN | Zhejiang | 2190500 |
+------+----------+-------------+----------+------------+
1 row in set (0.00 sec)
#查询城市名包含aoli的记录
mysql> select * from city where Name like '%aoli%';
+------+--------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+--------+-------------+----------+------------+
| 3304 | Miaoli | TWN | Miaoli | 90000 |
+------+--------+-------------+----------+------------+
1 row in set (0.00 sec)
6.3、含有__通配的字符串
#查询城市名以zhou结尾且开始长度为5的字符串
mysql> select * from city where Name like '_____zhou';
+------+-----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+-----------+-------------+----------+------------+
| 1906 | Zhengzhou | CHN | Henan | 2107200 |
| 1947 | Changzhou | CHN | Jiangsu | 530000 |
| 2091 | Zhangzhou | CHN | Fujian | 181424 |
| 2204 | Xuangzhou | CHN | Anhui | 112673 |
+------+-----------+-------------+----------+------------+
4 rows in set (0.00 sec)
#查询城市名以Shang开头且结尾长度为3的字符串
mysql> select * from city where Name like 'Shang___';
+------+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+------+----------+-------------+----------+------------+
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 2113 | Shangqiu | CHN | Henan | 164880 |
| 2166 | Shangrao | CHN | Jiangxi | 132455 |
+------+----------+-------------+----------+------------+
3 rows in set (0.00 sec)
7、使用limit限制查询结果的数量
#查询城市表里人口数最少的前五位城市
mysql> select * from city order by Population asc limit 5;
+------+---------------------+-------------+-------------+------------+
| ID | Name | CountryCode | District | Population |
+------+---------------------+-------------+-------------+------------+
| 2912 | Adamstown | PCN | – | 42 |
| 2317 | West Island | CCK | West Island | 167 |
| 3333 | Fakaofo | TKL | Fakaofo | 300 |
| 3538 | Città del Vaticano | VAT | – | 455 |
| 2316 | Bantam | CCK | Home Island | 503 |
+------+---------------------+-------------+-------------+------------+
5 rows in set (0.00 sec)
8、使用GROUP BY进行分组查询
GROUP BY的关键作用在于它能够将数据表中的记录按照一个或多个字段的值进行分类
8.1、GROUP BY与聚合函数一起使用
#统计每个国家的城市数与对应的人口总数
select count(*),Population,Countrycode from city group by Countrycode;
#查询哪个国家的城市人口数大于655000和对应的数量
select count(*),Population,Countrycode from city where Population > 655000 group by Countrycode;
8.2、GROUP BY与聚合函数,HAVING一起使用
#查询城市人口大于165000的城市数以及对应的国家
select count(*),Countrycode,Population from city where Population > 1655000 group by Countrycode having count(*)>3;
十二、别名设置
在査询数据时可为表和字段取別名,该别名代替表和字段的原名参与查询操作。
1、为表取别名
#将countrylanguage改为cl查询整表
select * from countrylanguage as cl limit 10;
2、为字段取别名
#将city表中的CountryCode取名为'国家',Population取名为'人口数'查询
select CountryCode as '国家',Name,Population as '人口数' from city limit 10;
十三、表的关联
- 一对一
- 在一对一关系中,一个表中的一个记录只能与另一个表中的一个记录相关联,反之亦然。例如,一个员工可能只有一个唯一的身份证号码,而身份证号码表中每个记录也只对应一位员工。
- 实现方式:通常在任一表中设置主键,并在另一表中设置外键,指向这个主键。
- 一对多
- 在一对多关系中,一个表中的一个记录可以与另一个表中的多个记录相关联,但反过来,另一个表中的一个记录只能与一个表中的一个记录关联。例如,一个部门可以有多个员工,但每个员工只能属于一个部门。
- 实现方式:"一"的那一方的主键作为"多"的那一方的外键,例如在
departments
表和employees
表之间,departments
表的department_id
作为主键,同时也是employees
表中的department_id
外键。
- 多对多
- 在多对多关系中,一个表中的一个记录可以与另一个表中的多个记录关联,同时,另一个表中的一个记录也可以与一个表中的多个记录关联。例如,学生可以选修多个课程,而一门课程也可以被多个学生选修。
- 实现方式:通常通过引入第三个关联表(也称中间表或交集表)来实现这种关系。关联表中包含两个表的主键作为自身的外键,如
students_courses
表,它包含student_id
和course_id
,分别引用students
表和courses
表的主键。
测试数据:
DROP TABLE IF EXISTS student;
DROP TABLE IF EXISTS class;
-- 创建班级表
CREATE TABLE class(
cid int(4) NOT NULL PRIMARY KEY,
cname varchar(30)
);
-- 创建学生表
CREATE TABLE student(
sid int(8) NOT NULL PRIMARY KEY,
sname varchar(30),
classid int(8) NOT NULL
);
-- 为学生表添加外键约束
ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);
-- 向班级表插入数据
INSERT INTO class(cid,cname)VALUES(1,'Java');
INSERT INTO class(cid,cname)VALUES(2,'Python');
-- 向学生表插入数据
INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);
INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);
INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);
INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);
1、关联查询
#查询java班的所有同学
select * from student where classid=(select cid from class where cname='java');
2、删除有关联关系的数据
班级表和学生表之间存在关联关系,要删除Java班级,应该先删除学生表中与该班相关联的学生。
#删除class表里的java字段
delete from student where classid=(select cid from class where cname='java');
delete from class where cname='java';
十四、多表连接查询
1、内连接查询
#使用world数据库
mysql> use world;
#查询不同国家行政区、政府形式及其对应的官方语言数据
select distinct city.District,country.GovernmentForm,countrylanguage.Language from country inner join city on country.Code=city.CountryCode inner join countrylanguage on country.Code=countrylanguage.CountryCode order by language asc limit 10;
2、外连接查询
1、LEFT [OUTER] JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。
2、RIGHT [OUTER] JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。
2.1、左外连接
#查询每个城市的详细信息,包括城市所在的国家及其官方语言
mysql> SELECT city.ID,city.Name AS CityName,country.Name AS CountryName,countrylanguage.Language AS OfficialLanguage FROM city LEFT JOIN country ON city.CountryCode = country.Code LEFT JOIN countrylanguage ON country.Code = countrylanguage.CountryCode AND countrylanguage.IsOfficial = 'T' ORDER BY city.Name limit 10;
+------+------------------------+--------------------+------------------+
| ID | CityName | CountryName | OfficialLanguage |
+------+------------------------+--------------------+------------------+
| 670 | A Coruña (La Coruña) | Spain | Spanish |
| 3097 | Aachen | Germany | German |
| 3318 | Aalborg | Denmark | Danish |
| 2760 | Aba | Nigeria | NULL |
| 1404 | Abadan | Iran | Persian |
| 395 | Abaetetuba | Brazil | Portuguese |
| 3683 | Abakan | Russian Federation | Russian |
| 1849 | Abbotsford | Canada | English |
| 1849 | Abbotsford | Canada | French |
| 2747 | Abeokuta | Nigeria | NULL |
+------+------------------------+--------------------+------------------+
10 rows in set (0.00 sec)
2.2、右外连接
#查询每个国家及其所有城市的详细信息,同时也包括该国家的官方语言
select distinct country.Code,country.Name,city.Name,countrylanguage.language from country left join city on country.Code=city.CountryCode right join countrylanguage on country.Code=countrylanguage.CountryCode and countrylanguage.IsOfficial = 'T' order by country.Name;
十五、子查询
1、带比较运算符的子查询
#查询country表中与城市名为'Shanghai'相对应的国家信息
select * from country where Code=(select CountryCode from city where Name='Shanghai');
2、带EXISTS关键字的子查询
EXISTS关键字后面的参数可以是任意一个子查询,它不产生任何数据只返回TRUE或FALSE。当返回值为TRUE时外层查询才会执行
#可以正常返回结果
select * from city where exists(select Code from country where Continent='Asia') limit 10;
#返回空结果集
select * from city where exists(select Code from country where Continent='TEST') limit 10;
3、带ANY关键字的子查询
ANY关键字表示满足其中任意一个条件就返回一个结果作为外层查询条件。
select * from city where Population > any(select Population from country) limit 10;
4、带ALL关键字的子查询
ALL关键字与ANY有点类似,只不过带ALL关键字的子査询返回的结果需同时满足所有内层査询条件。
#同样的语句换成all关键字就返回空结果集
select * from city where Population > all(select Population from country) limit 10;
标签:city,Name,基础,查询,MySQL,操作,where,select,Population
From: https://www.cnblogs.com/misakivv/p/18125127