0%

SQL-查询命令

一 数据库基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#指定数据库
use wx;

#创建表
create table test(
id int(10) primary key auto_increment,
name varchar(20) comment '姓名',
age int(10)
) charset=utf8 comment '哈哈';

#插入数据
insert into test(id,name) values(1,"战三");
insert into test(id,name) values(2,"两居");

#更新数据
update test
set name="李四"
where id = 1;

#删除数据
delete from test where id =1;

#查询
select * from test;

#删除表
drop table test;

#修改表结构--增加列
ALTER TABLE test ADD sex varchar(2) DEFAULT '1' comment '性别';
#修改表结构--修改列
ALTER TABLE test MODIFY sex int(2);
#修改表结构--删除列
ALTER TABLE test DROP COLUMN sex;

二 高级查询

1. 新建表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create table t_employee(
id int(10) primary key auto_increment,
name varchar(20),
age int(10)
) CHARSET=utf8 comment "员工表";

create table t_salary(
id int(10) primary key auto_increment,
money int(20),
monch int(10)
) CHARSET=utf8 comment "工资表";

insert into t_employee values(1,"张三",18);
insert into t_employee values(2,"李四",28);
insert into t_employee values(3,"王五",38);

insert into t_salary values(1,1000,1);
insert into t_salary values(2,20,2);
insert into t_salary values(3,300,3);

2. 聚合查询

1
2
3
4
5
#平局值/和
select avg(money),sum(money) from t_salary;
# WHERE 关键字无法与聚合函数一起使用
select * from t_salary t
having t.avg(money) >1;

3. 多表查询

1
2
3
4
#多表查询,又称笛卡尔查询,查询结果:列是和 行是积
select * from t_employee,t_salary;
# 加上筛选条件,可以避免笛卡尔现象
select * from t_employee e,t_salary s where e.age>20 and s.monch>2;

4. 连接查询

1
2
3
4
5
6
7
8
9
10
11
12
#交叉查询(多表查询,又称笛卡尔查询,查询结果:列是和 行是积)
select * from t_employee cross join t_salary;
select * from t_employee,t_salary;

#内连接(就是交叉查询多了查询条件)
select * from t_employee e inner join t_salary s on e.age>20 and s.monch>2;
select * from t_employee e,t_salary s where e.age>20 and s.monch>2;

#外连接(outer 可以省略)
select * from t_employee e left outer join t_salary s on e.age>20 and s.monch>2;
select * from t_employee e right outer join t_salary s on e.age>20 and s.monch>2;
select * from t_employee e full outer join t_salary s on e.age>20 and s.monch>2;

关于INNER JOIN、 LEFT JOIN、 RIGHT JOIN、 FULL JOIN区别,借用雪峰大神的图:
image.png

  1. 1
    2
    3
    4
    # 联合查询(两个表的数据加到一起,必须有相同的查询列)
    select * from t_employee union select * from t_salary;
    # union all 会显示重复
    select * from t_employee union all select * from t_salary;

参考附录:
廖雪峰文章:https://www.liaoxuefeng.com/wiki/1177760294764384/1179610888796448