MySQL数据库SQL语句(二)
准备
mysql -uroot -p
show databases;
create database train_ticket; #创建库
use train_ticket; #进入库
create table REGION(region varchar(10),site varchar(20)); #创建表
create table FARE(site varchar(20),money int(10),date varchar(15));
desc REGION; #查看表结构
desc FARE;
insert into REGION values ('south','changsha'); #插入表内容
insert into REGION values ('south','nanchang');
insert into REGION values ('north','beijing');
insert into REGION values ('north','tianjin');
insert into FARE values ('changsha',1000,'2021-03-7');
insert into FARE values ('nanchang',700,'2021-03-7');
insert into FARE values ('beijing',1500,'2021-03-7');
insert into FARE values ('tianjin',1200,'2021-03-3');
insert into FARE values ('beijing',2200,'2021-03-10');
select * from REGION; #查看表内容
select * from FARE;
一、MySQL数据库SQL语句(补充)
EXISTS------用来测试内查询有没有产生任何结果
类似布尔值是否为真
如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。
语法:SELECT "栏位1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
例:
select region from REGION where exists (select * from FARE where money = '700');
二、连接查询
1、inner join(等值相连)
只返回两个表中联结字段相等的行
SELECT * FROM 表1 表1的别名 INNER JOIN 表2 表2的别名 on 表1别名.栏位 = 表2别名.栏位; #这里的栏位名称相同
例:
select * from REGION AS A inner join FARE AS B on A.site = B.site;
2、left join(左联接)
返回包括左表中的所有记录和右表中联结字段相等的记录
SELECT * FROM 表1 表1的别名 LEFT JOIN 表2 表2的别名 on 表1别名.栏位 = 表2别名.栏位; #这里的栏位名称相同
例:
select * from REGION AS A left join FARE AS B on A.site = B.site;
联接规则:
表格一中有的,表二中没有的,联接用NULL填充;
表一有,表二也有,联接两个表相同字段的行
表一没有,表二有的,则省略,以表一为主。
3、right join(右联接)
返回包括右表中的所有记录和左表中联结字段相等的记录
SELECT * FROM 表1 表1的别名 RIGHT JOIN 表2 表2的别名 on 表1别名.栏位 = 表2别名.栏位; #这里的栏位名称相同
例:
select * from REGION AS A right join FARE AS B on A.site = B.site;
右联接和左联接类似,以表二为主。
三、CREATE VIEW 视图
视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。
临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行