《使用DQL命令查询数据 上》

day3

课程

part1

CREATE TABLE yuangong(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
sex VARCHAR(20),
sid INT,
FOREIGN KEY(sid) REFERENCES gongsi(id)
);

首先创建一个从表,是它与主表相关联

CREATE TABLE gongsi(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
class VARCHAR(20)
);

再创建主表

SELECT * FROM yuangong;

这种查询yuangong表的方式速度较慢

SELECT id,name FROM yuangong;

这种查找指定字段的方式速度较快

SELECT yuangong.id,yuangong.name,gongsi.*
FROM yuangong,gongsi
where yuangong.sid=gongsi.id;

这种查询方法在选择字段时为了防止字段名重复,使用了用表名区分字段的方法

SELECT y.id AS "code",y.name,g.*
FROM yuangong AS y,gongsi AS g
WHERE y.sid=g.id;

这是连表查询,AS可以给表或者字段名取别名,也可以不使用AS而是使用空格,效果相同

SELECT id,name,age+20 AS"年龄" FROM yuangong;

在查询时可以使用表达式,age字段会直接输出加了20之后的数值,可以加上别名以保证代码的安全和保密性

SELECT NAME,sex FROM yuangong;
SELECT DISTINCT NAME,sex FROM yuangong;

在查询时默认为all,就是不管有没有重复的数据都会输出,但是如果使用DISTINCT,那么就不会出现指定字段完全相同的重复数据,DISTINCT的作用就是去除重复值

SELECT yuangong.*
FROM yuangong
WHERE name LIKE "王%";
SELECT yuangong.*
FROM yuangong
WHERE name LIKE "王__";

使用like关键字做模糊查
%表示0个或多个字符
表示一位字符,如果想查询后面或前面多位,可以多次使用%与

SELECT * FROM yuangong
WHERE id IN(1,5,8);

in的用法:in类似与一个集合,将查找字段的条件整合起来放入一个集合中,依次查找

SELECT y.*,g.*
FROM yuangong Y,gongsi g;

这种查找的方式叫非等值连接,结果为笛卡尔积

SELECT y.*,g.*
FROM yuangong Y,gongsi g
WHERE y.sid=g.`id`;

这种是最常见也是用的最多的等值连接,只有满足查询条件的记录才会被查询出来,不满足条件的记录都不会被查询出来,
表与表之间用逗号连接

SELECT yuangong.*,gongsi.*
FROM yuangong INNER JOIN gongsi
ON yuangong.sid=gongsi.id;

内连接查询,表与表之间使用inner join连接,inner可以省略
如果内连接不带条件,则结果是笛卡尔积
on 后面写连表查询的条件
查询出来的结果和等值连接一样
on与后面的查询语句如where的顺序需注意

SELECT y.*,g.*
 FROM yuangong Y LEFT OUTER JOIN gongsi g
 ON y.`sid`=g.`id`;
SELECT yuangong.*,gongsi.*
 FROM yuangong RIGHT OUTER JOIN gongsi
 ON yuangong.`sid`=gongsi.`id`;

上面为左外连接与右外连接,这其中的outer是可以忽略的,这两种外连接的作用是左外连接可以将左表的所有数据都输出出来,与右表无匹配的数据则用null填充,右外连接则相反

CREATE TABLE us(
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 pid INT,
 NAME VARCHAR(20)
 );
 SELECT us1.*,us2.*
 FROM us us1 INNER JOIN us us2
 ON us1.`pid`=us2.`id`;

上面的程序为自连接,也就是自己与自己进行连接,总的来说就是通过取别名的方式实现同一个表中不同数据的分类排序,笔者这里使用的是内连接的连接方式,也可以使用等值连接,结果相同

总结

今天的课程整体来说不算很多,但是难度是比较大的,特别是等值连接和内连接的运用需要反复练习,自连接也需要仔细理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值