持续更新,mysql的复习强化路

数据库与表的基本操作

  1. 了解结构化查询语言SQL
    sql是结构化查询语言,是一门标准的计算机语言,用于访问和操作数据库,其主能包括数据定义、数据操纵、数据查询和数据控制
    sql已称为RDBMS的标准语言,单不同的RDBMS使用的SQL版本有一些差异。

    按功能用途可以将sql语言分为4类: ddl、dml、dql、dcl

    • DDL(数据定义语言) :用于数据库、表视图等的建立、删除包括CREATE、ALTER、DROP
    • DML(数据操纵语言):用于添加、删除和修改数据表中的记录包括: INSERT、DELETE、UPDATE
    • DCL(数据控制语言):包括数据库对象的权限管理和事务管理包括:COMMIT、ROLLBACK、GRANT
    • DQL(数据查询语言):查询是数据库的基本功能包括: SELECT
  2. 掌握数据库相关操作
    DDL之数据库
    创建数据库

CREATE DATABASE 数据库名

删除数据库

DROP DATABASE 数据库名

展示数据库

show databases;

查看自己当前在哪个数据库下工作

select database();
  1. 了解存储引擎engine
    存储引擎,就是如何存储数据、如何更新数据、如何查询数据、如何为存储的数据建立索引等一系列技术的实现方法
    查看mysql支持的存储引擎
show engines;
存储引擎描述
MyISAM拥有较快的插入、查询速度,但不支持事务
InnoDB支持ACID事务,支持行级锁,支持外键;MySQL 5.5版本之后默认存储引擎
MRG_MYISAM将一组结构相同的MyISAM表聚合成一个整体,再进行增删改查操作。
Memory所有数据存储再内存中,响应快,MySQL重启时数据会全部丢失
Archive归档,且有压缩机制,适用于历史数据归档
CSV逻辑上由逗号分隔数据,会为每张表创建一个.csv文件。
  1. 熟悉MySQL的数据类型
    在创建数据表时、准确的定义字段的数据类型比较重要

数值类型

类型所占字节数说明
tinyint1小整数值,如状态
smallint2大整数值
mediumint3大整数值
int4大整数值
bigint8极大整数值
float4单精度浮点数值
double8双精度浮点数值
decimalmax(D+, M+)含小数值,例如金额

日期和时间类型

类型所占字节数说明
date3YYYY-MM-DD
time3HH:MM:SS
year1YYYY
datetime8YYYY-MM-DD HH:MM:SS
timestamp8YYYYMMDDHHMMSS

字符串类型

类型所占字节数说明
char0~255定长字段串
varchar0~65535变长字符串
text0~65535长文本数据
blob二进制形式文本数据
  1. 熟悉MySQL的建表语法
    在DDL中对数据表的操作主要有3种: 创建、修改、删除
    创建数据表,需要定义的信息主要包括: 表名、字段名、字段类型

mysql的建表语法

create [temporary] table [if not exists] table_name [(create_definition,...)] [table_options][select_statement]

temporary:临时表,会话结束自动消失
create_definition:定义表种各列属性
table_options:表配置,如存储引擎、字符集
select_statement: 通过select语句建表

  1. 掌握数据表的相关操作
    示例建表
create table contacts(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
phone VARCHAR(20)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;

查看表

show tables;

查看表结构

desc contacts;

增加表结构

alter table contacts add sex char(1);

修改表结构

alter table contacts modify sex int;

删除表结构

alter table contacts drop column sex;

删除表

drop table contacts;
  1. 掌握如何向表中插入数据
    INSERT插入单条数据
INSERT INTO table_name(field1,field2,...,fieldN) VALUES (value1,value2,...,valueN);

INSERT插入多条数据

INSERT INTO table_name(field1,field2,...,fieldN) VALUES (valueA1,valueA2,...,valueAN),(valueB1,valueB2,...,valueBN);

注意事项:

  • 如果字段是字符型,值必须适用单引号或者双引号,如"value";如果值本身就有引号,需要转义
  • 如果所有列都要添加数据,insert into 语句可以不指定列,即INSERT INTO table_name VALUES (valueA1,valueA2,…,valueAN);
  1. 掌握如何修改(更新)表中的数据
    updata语法:
UPDATE table_name SET field1=newValue1,field2=newValue2[WHERE Clause]

注意事项:

  • 可以同时更新一个或多个字段
  • 可以通过where子句来指定更新范围,如果不带where,则更新数据表中所有记录。
updata contacts set phone='12345678901' where name = "张三"
  1. 掌握如何删除表中的数据
    delete from table_name [WHERE Clause]
    注意事项:
  • 可以通过where子句来指定删除范围,如果不带where,则删除数据表中所有记录

示例总结:
建表

create table contacts(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
sex tinyint default 1,
phone VARCHAR(20)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;

插数据

insert into contacts(name,sex,phone) values("张三",1,"13200000001")
insert into contacts(name,sex,phone) values("xiong\'s",1,"13200000002")
// 有默认值的字段,可以不赋值也行的哈~
insert into contacts(name,sex,phone) values("李四",1,"13200000003"),("王五",1,"13200000004");

修改(更新表)

update contacts set sex = 2;

updata contacts set sex = 1 where name="张三";

updata contacts set sex = 2, phone="13200000005" where name="张三";

删除表内容

delete from contacts where id =4;
delete from contacts;
  1. 了解什么是数据的完整性(准确性、正确性)
    数据完整性是指存储在数据库中的数据,应该保持一致性和可靠性
    关系模型允许定义三类数据约束,他们是事提完整性、参照完整性、以及用户定义的完整性约束、其中前两种完整性约束由关系数据库系统自动支持
  • 实体完整性: 实体就是现实世界中的某个对象,RDBMS中一行代表一个实体,实体完整性就是保证每一个实体都能被区别
  • 域完整性: 域完整性主要是对列的输入有要求,通过限制列的数据类型、格式或值的范围来实现
  • 参照完整性: 主要是表与表之间的关系、可以通过外键来实现
  • 用户自定义完整性: 借助存储过程和触发器实现
  1. 掌握如何保证数据完整性(重点)

实体完整性: 要求每张表都有唯一标识符,每张表中的主键字段不能为空且不能重复
域完整性: 针对某一具体关系数据库条件,保证表中某些列不能输入无效值
约束方法: 限制数据类型、检查约束、默认值、费控约束
参照完整性: 要求关系中不允许引用不存在的实体
用户自定义完整性: 反应某一具体应用所涉及的数据必须满足语义要求。

唯一性约束
在Mysql中可以适用关键字UNIQUE实现字段的唯一性约束,从而保证实体完整性

  • unique意味着任何两条数据的同一个字段不能有相同值
  • 一个表中可以有多个unique约束
create table person(
id int not null auto_increment primary key comment "主键id",
name varchar(30) comment "姓名",
id_number varchar(18) unique comment "身份证号"
);

外键约束
外键(FOREIGN KEY)约束定义了表之间的一致性关系,用于强制参照完整性。外键约束定义了对同一个表或者其他表的列的引用,这些列具有PRIMARY KEY 或者 UNIQUE约束。

# 学生表
create table stu(
stu_no int not null primary key comment "学号",
stu_name varchar(30) comment '姓名'
);
# 成绩表
create table sc(
    id int not null auto_increment primary key comment "主键id",
    stu_no int not null comment "学号",
    course varchar(30) comment "课程",
    grade int comment "成绩",
    foreign key(stu_no) references stu(stu_no)
);

数据库与表的基本操作

  1. 了解select的完整语法
select column_name1,column_name2
from table_name
[where where_condition]
[group by {col_name | expr | position},...[with rollup]]
[having where_condition]
[ORDER BY {col_name | expr |position} [ASC | DESC],...[WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
  1. 掌握适用select进行简单查询(重点)
    查询所有
select * from person

条件查询

select name, id_number from person
select name,id_num from from person where name="张三";

工具用法 (科普):

select 8*9;
  1. 熟练掌握where子句各类运算符的适用
    在sql中,insert、updata、delete和select后面都能带where子句,用于插入、删除、修改或查询指定条件的记录

sql语句中适用where子句用法

select column_name from table_name where column_nam 运算符 value
运算符描述
=等于
<>或!=不等于
>大于
<小于
>=大于等于
>=小于等于
between and选取介于两个值之间的数据范围;在Mysql中,相当于>=并且<=
  1. 熟练掌握多条件查询and、or的适用
    在where子句中,适用and、or可以把两个或多个过滤条件结合起来

and、or运算符语法

select column_name from table_name where condition1 and condition2 or condition3
运算符描述
and表示左右两边的条件同时成立
or表示左右两边只要有一个条件成立

案例演示:

use mydb;

create table employee(
    id int not null auto_increment primary key,
    name varchar(30) comment "姓名",
    sex varchar(1) comment "性别",
    salary int comment "薪资(元)"
);

insert into employee(name,sex,salary) values("张三",'男',5500);
insert into employee(name,sex,salary) values("李洁",'女',4500);
insert into employee(name,sex,salary) values("李小梅",'女',4200);
insert into employee(name,sex,salary) values("欧阳辉",'男',7500);
insert into employee(name,sex,salary) values("李芳",'女',8500);
insert into employee(name,sex,salary) values("张江",'男',6800);
insert into employee(name,sex,salary) values("李四",'男',12000);
insert into employee(name,sex,salary) values("王五",'男',3500);
insert into employee(name,sex,salary) values("马小龙",'男',6000);
insert into employee(name,sex,salary) values("龙五",'男',8000);
insert into employee(name,sex,salary) values("冯小芳",'女',10000);
insert into employee(name,sex,salary) values("马小花",'女',4000);

# 单条件查询男性工资
select * from employee where sex = "男";
select * from employee where sex != "女";
select * from employee where sex <> "女";
select * from employee where salary >= 10000;
select * from employee where salary between 10000 and 12000;

# 多条件,性别为男并且薪资大于等于10000
select * from employee where sex = "男" and salary >=10000;

# 多条件,男性员工中,大于10000 或者 小于4000
select * from employee where sex = "男" and salary <=4000 or salary >=10000;
# 以上错误写法 or作用域它左右两边
select * from employee where sex = "男" and (salary <=4000 or salary >=10000);
  1. 掌握运算符in 的使用
    运算符in允许我们在where子句中过滤某个字段的多个值

where 子句中使用in语法

select column_name from table_name where column_name in (value1,value2,...)
  1. 掌握运算符like的使用

where子句使用like语法

select column_name from table_name where column_name like "%value%"

说明:
- like子句中的%类似于正则表达式中的*,匹配任意0个或多个字符
- like子句中的_匹配任意单个字符
- like子句如果没有%和_就相当于运算符=的效果

示例代码:

# 选择id是1或者2或者3的
select * from emplyee where id=1 or id=2 or id=3;
select * from emplyee where id in(1,2,3);
#筛选张三
select * from emplyee where name like "张三";
# 筛选姓李的用户
select * from emplyee where name like "李%";
# 筛选名字芳结尾的
select * from emplyee where name like "%芳";
  1. 了解Mysql内置函数
    我们通常说的Mysql函数指的是Mysql数据库提供的内置函数,包括数学函数,字符串函数,日期和时间函数,聚合函数条件判断函数等,这些内置函数可以帮助用户更加方便地处理表中的数据,简化用户操作
函数描述
数学函数ABS、SQRT、MOD SIN COS TAN COT等
字符串函数length lower upper trim substring
日期时间函数now curdate curtime sysdate data_format yera month week
聚合函数count sum avg min max
条件判断函数if ifnull case when 等
系统信息函数version database user等
加密函数md5
  1. 掌握常用函数的用法(重点)

函数now()

应用场景:
在实际应用中,大多数业务表都会带一个创建时间,create_time字段,用于记录每一条数据的产生时间,在向表中插入数据时,就可以在insert语句中使用now()函数

inser into user(id,name,create_time) values(1,"zhangsan",now());

date_format()
应用场景:
在实际应用中,一般会按标准格式存储日期/时间,如:2020-05-26 20:41:16. 在实际的查询中,又可能有其他的格式要求,这时候就需要采用date_format()函数进行格式转换。
select name,date_format(birthday,'%Y%m%d') from user;
聚合函数
聚合函数是对一组值进行计算,并返回单个值。
Mysql常用的聚合函数有5个,分别count、sum、avg、min和max.

函数 | 描述
--- | ---
count | 返回复核条件的记录总数
sum | 返回指定列的总和,忽略空值
avg | 返回指定列平局值,忽略空值
min | 返回指定列的最小值, 忽略空值
max | 返回指定列的最大值,忽略空值

示例代码:

# 男性数据有多少条
select count(*) from employee where sex = '男';
# 员工表里面的总薪资
select sum(salary) from employee;
# 最低薪水
select min(salary) from employee;
# 平均薪资
select avg(salary) from employee;

如果有一条数据的工资为NULL它会自动把这条数据整体过滤掉。

ifnull()

函数ifnull()用于处理NULL值
ifnull(v1,v2)如果V1的值不为NULL,则返回v1否则返回V2.

示例代码:

insert into employee(name,sex,salary) values("张熊","男",null);

case when

case when 是流程控制语句,可以在sql语句中使用case when来获取更加准确和直接的结果,sql中的case when类似于编程语句中的if else 或者switch

case [col_name] when [value1] then [result1]...else [default] end
case when [expr] then [result1]...else[default] end

select id,name,case sex
                    when '男' then 'F'
                    when '女' then 'M'
                    else ''
                end as sex, salary from employee;
  1. 掌握排序的应用场景以及order by的使用
    我们已经掌握使用select语句结合where查询条件获取需要的数据,但是在实际应用中,还会遇到下面这类需求,又该如何解决?
  • 学生按升高从高到低进行排序
  • 双十一交易量排行榜
  • 博客中的文章按先后顺序显示
    在sql中,使用order by对查询结果集进行排序,可以按照一列或多列进行排序

order by语法

select column_name1,column_name2 from table_name1,table_name2 order by column_name,column_nam [asc|desc]

说明: asc表示按升序排列,desc表示按降序排列
默认情况按升序排列

示例sql:

select * from employee order by salary desc;
# 按两个字段进行排序
select * from employee order by sex,salary desc;
# 以上就是说 先按性别排序,就会先显示女再显示男,然后再按薪水排序,整体出现的情况,先按薪资从大到小显示女员工信息,再按薪资从大到小显示男员工薪资。
  1. 掌握分页的应用场景以及limit的使用
    在select语句中使用limit子句来约束要返回的记录数,通常使用limit实现分页

limit语法

select column_name1,column_name2
from table_name1,table_name2
limit [offset,]row_count

说明: offset指定要返回的第一行的偏移量,第一行的偏移量是0,而不是1.row_count指定要返回的最大行数。这个offset对于新手来讲,这个偏移量的说法很不友好我感觉,反正我第一次没理解出来,就是从第几条数据开始读,读多少条。 第一页开始每页显示10条 limit 0,10

示例sql:

# 获取前3条数据
select * from employee limit 3;
# 分页每页显示5条,显示第一页
select * from employee limit 0,5;
# 分页每页显示5条,显示第二页
select * from employee limit 5,5;
# 分页显示每页显示5条,显示第三页
select * fromm employee limit 10,5;
  1. 掌握group by 的应用场景及使用
    我们已经掌握使用select语句结合where查询条件获取需要的数据,但在实际的应用中,还会遇到下main这类需求,又该如何解决:
  • 公司想知道每个部门有多少名员工
  • 班主任想统计各科第一名的成绩
  • 某门店想掌握男、女性会员的人数及平局年龄
    从字面上理解,group by表示根据某种规则对数据进行分组,它必须配合聚合函数进行使用,对数据进行分组之后需要进行count、sum、avg、max和min等聚合运算

group by语法

select column_name,aggregate_function(column_nam) from table_name group by column_name
  1. aggregate_function表示聚合函数。

  2. group by可以对一列或多列进行分组。

  3. 掌握having的应用场景及使用
    在sql中增加having子句的原因是,where关键字无法与聚合函数一起使用,having子句可以对分组后的各组数据进行筛选

having语法

select column_name,aggregate_function(column_name)
from table_name
where column_name operator value
group by column_name
having aggregate_function(column_name) operator value

示例sql:

# 把原有的employee表删除了,创建这个表
create table employee(
    id int not null auto_increment primary key,
    name varchar(30) comment "姓名",
    sex varchar(1) comment "性别",
    salary int comment "薪资(元)",
    dept varchar(30) comment "部门"
);
insert into employee(name,sex,salary,dept) values("张三", "男", 5500, "部门A");
insert into employee(name,sex,salary,dept) values("李洁", "女", 4500, "部门C");
insert into employee(name,sex,salary,dept) values("李小梅", "女", 4200, "部门A");
insert into employee(name,sex,salary,dept) values("欧阳辉", "男", 7500, "部门C");
insert into employee(name,sex,salary,dept) values("李芳", "女", 8500, "部门A");
insert into employee(name,sex,salary,dept) values("张江", "男", 6800, "部门A");
insert into employee(name,sex,salary,dept) values("李四", "男", 12000, "部门B");
insert into employee(name,sex,salary,dept) values("王五", "男", 3500, "部门B");
insert into employee(name,sex,salary,dept) values("马小龙", "男", 6000, "部门A");
insert into employee(name,sex,salary,dept) values("龙五", "男", 8000, "部门B");
insert into employee(name,sex,salary,dept) values("冯小芳", "女", 10000, "部门C");
insert into employee(name,sex,salary,dept) values("马小花", "女", 4000, "部门B");
insert into employee(name,sex,salary,dept) values("张熊", "男", 8800, "部门A");

# 男性员工和女性员工的数量
select sex,count(*) from employee group by sex;
# 统计每个部门的人数
select dept,count(*) from employee group by dept;
# 知道每个工资薪水总和
select dept,sum(salary) from employee group by dept;
# 每个部门薪资最高的
select dept,max(salary) from employee group by dept;
# 每个部门薪资最低
select dept,min(salary) from employee group by dept;
# 人数小于4个人的部门
select dept,count(*) from employee group by dept having count(*)<5;
  1. 属性group_concat的应用场景
    应用场景:
  • 使用group by可以分组统计每个部门有多少员工。加入,除了统计每个部门的员工数量之外,还想知道具体是哪些员工(员工列表),又该怎么实现呢?
  1. 掌握group_concat的使用

group_concat

group_concat配合group by一起使用,用于将某一列的值按指定的分隔符进行拼接,mysql默认的分隔符是逗号

select dept,group_concat(name) from employee group by dept;
  1. 掌握distinct的用法
    distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列。在实际的应用中,表中的某一列含有重复值是很常见的,如employ表的dept列.如果在查询数据时,希望得到某列的所有不同值,可以使用distinct
#distinct语法
select distinct column_name,column_nam
from table_name;

sql示例:

# 性别这列去重
select distinct sex from employee;

create table footprint(
    id int not null auto_increment primary key,
    username varchar(30) comment '用户名',
    city varchar(30) comment "城市",
    visit_date varchar(10) comment "到访日期"
);

insert into footprint(username, city, visit_date) values("liufeng", "贵阳", "2019-12-05");
insert into footprint(username, city, visit_date) values("liufeng", "贵阳", "2020-01-15");
insert into footprint(username, city, visit_date) values("liufeng", "北京", "2018-10-10");
insert into footprint(username, city, visit_date) values("zhangsan", "上海", "2020-01-01");
insert into footprint(username, city, visit_date) values("zhangsan", "上海", "2020-02-02");
insert into footprint(username, city, visit_date) values("lisi", "拉萨", "2016-12-20");

# 有多少用户在footprint留下足迹
select distinct username from footprint;
# 所有的用户达到过哪些城市
select dictinct city from footprint;
# 每一个用户去过哪些地方
select distinct username,city from footprint;
  1. 熟悉表连接的几种方式
    表连接(join) 是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据

表连接语法

select table1.column,table2.column from table1,table2 where table1.column1 = table2.column2;
  1. 熟悉几种表连接的区别
  • 内连接 join 或inner join
  • 外连接:左连接 left join,右连接 right join 全连接 full join
  • 自然连接:同一张表内的连接
连接类型定义例子
内连接至连接匹配的行select A.c1,B.c2 from A join B on A.c3 = B.c3
左连接包含左表的全部行(不管右表是否存在与之匹配的行), 以及右表中遍布匹配的行select A.c1,B.c2 from A left join B on A.c3 = B.c3
右连接包含右表的全部行(不管左表是否存在与之匹配的行), 以及左表中遍布匹配的行select A.c1,B.c2 from A right join B on A.c3 = B.c3
全连接包含左右两个表的全部行(不管在另一个表中是否存在与之匹配的行)select A.c1,B.c2 from A full join B on A.c3 = B.c3

全连接: mysql里面无

  1. 掌握多表连接查询
# 创建两张表
drop table if exists score;
drop table if exists student;

create table student(
stu_no varchar(20) not null primary key comment"学号",
name varchar(30) comment "姓名",
address varchar(150) comment '地址'
);
insert into student(stu_no,name,address) values('2016001','张三','贵州贵阳');
insert into student(stu_no,name,address) values('2016002','李芳','陕西兴平');
insert into student(stu_no,name,address) values('2016003','张晓燕','江西南昌');

create table score(
id int not null auto_increment primary key,
course varchar(50) comment '科目',
stu_no varchar(20) comment "学号",
score int comment '分数',
foreign key(stu_no) references student(stu_no)
);

insert into score(course,stu_no,score) values('计算机','2016001',99);
insert into score(course,stu_no,score) values('离散数学','2016001',85);
insert into score(course,stu_no,score) values('计算机','2016002',78);

# 表的数据特性,有个叫张晓燕 2016003的没成绩

# 内连接(交集)
select A.stu_no,A.name,B.course,B.score
from student A
join score B on(A.stu_no = B.stu_no);
select A.stu_no,A.name,B.course,B.score
from student A
inner join score B on(A.stu_no = B.stu_no);
select A.stu_no,A.name,B.course,B.score
from student A
where A.stu_no = B.stu_no;

# 左连接
select A.stu_no,A.name,B.course,B.score
from student A left join score B on(A.stu_no = B.stu_no);
  1. 什么是自连接
    自连接时一种特殊的表连接,它是指互相连接的表在物理上同为一张表,但是逻辑上时多张表。自连接通常用于表中的数据有层次结构,如区域表、菜单表、商品分类等。

自连接语法

select a.column,b.column
from table a,table b
where a.column=b.column;

示例sql:

drop table if exists area;
drop table if exists area;

create table area(
id int not null auto_increment primary key comment '区域id',
pid int not null comment '父id(0-省份)',
name varchar(30) comment '区域名称'
);

insert into area(id,pid,name) values(1,0,'贵州省');
insert into area(id,pid,name) values(2,1,'贵阳');
insert into area(id,pid,name) values(3,1,'遵义');
insert into area(id,pid,name) values(4,0,'广东省');
insert into area(id,pid,name) values(5,4,'广州');
insert into area(id,pid,name) values(6,4,'深圳');

# 查出所有城市
select * from area where pid<>0;
# 查出这些城市的父亲id
select A.id,A.name,B.name ad provinceName
from area A, area B
where A.pid = B.id and A.pid<>0;
  1. 掌握子查询in的使用
    之前的课程中,我们已经学习过运算符IN,它允许我们在where子句中过滤某个字段的多个值。

where子句使用in语法

select column_name from table_name where column_name IN(value1,value2,...);

如果运算符in后面的值式来源于某个查询结果,并非是指定几个值,这时就需要用到子查询。子查询又称为内部查询或嵌套查询,即在sql查询的where子句中嵌套查询语句

子查询in语法

select column_name from table_name
where column_name IN(
    select column_name from table_name [where]
);
  1. 掌握子查询exists的使用
    exists是子查询中用于测试内部查询是否返回任何行的布尔运算符。将主查询的数据放到子查询中做条件验证,根据验证结果(TRUE 或FALSE)来决定主查询的数据结果是否保留

where子句使用exists语法

select column_name1
from table_name1
where exists (select * from table_name2 where condition);

示例sql:

# 看下student表数据
select * from score;

# 要用in做一个子查询 查询所有选修了课程的学生
select A.* 
from student A
where A.stu_no in(select B.stu_no from score B);

# 查询选修了离散数学的学生
select A.*
from student A
where A.stu_no in (select B.stu_no from score B where B.course='离散数学')

# 要用exists做一个子查询 查询所有选修了课程的学生
select A.*
from student A
where exists(select * from score B where A.stu_no = B.stu_no);
# 这个exists说一点个人的理解,先看子查询里面的东西,也就是说子查询查询出来了一个表,这个时候就是说,A表查询出来的数据,在查询出来的这个表中存在就能输出出来,不存在就不能输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值