SELECT *FROM [Order Details]
–表查询时,如果表名中间有空格,加中括号
子查询
又称(嵌套查询 ),可以用in/exists语句实现,大致相同
IN语句
我们用之前的方式查询 出版过类型为business的出版社名和出版社id,多表查询:
SELECT pub_name,pub_id
FROM publishers,titles
WHERE titles.pub_id=publishers.pub_id
AND titles.type=‘business’
用in语句来查询
SELECT pub_name,pub_id
FROM publishers
WHERE pub_id IN (
SELECT pub_id
FROM titles
WHERE titles.type=‘business’)
普通IN语句形式如下:WHERE type IN (‘business’,‘mod_cook’)
而子查询可以 用语句 筛选符合条件的列 放入括号,而不需要逐一列举出来
注意的是,in语句括号里的select语句只能查询一列,一般与括号外需要匹配条件的的列相同,是不同表的同一列,不可以select *
举例
找1994年这一年,单本书销量最高的作者名
SELECT au_lname,au_fname
from authors,titleauthor,titles //查询authors表的姓名两列,同时需要连接另外两表
where authors.au_id=titleauthor.au_id
AND titleauthor.title_id=titles.title_id//连接authors表,titleauthor,titles
and titles.title_id in ( //限定条件,查找titles表的title_id,要求符合以下条件
select TOP 1 title_id
from sales
WHERE ord_date LIKE ‘%1994%’
order by qty desc
)//在sales表中查询 title_id,它的ord_date模糊匹配194,同时降序排列,只输出首位,即销量最高的一位
联接查询
在之前的多表查询中,我们采用直接查询加WHERE语句限制的方式,如
SELECT *
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id
这样的查询方式,计算机的操作方式是,对两张表的pub_id做乘法,给出所有匹配组合
即,publishers表有8列,titles表有18列,则会输出18*8=144列查询信息
然后在144列中筛选符合WHERE语句限定条件的列输出
这样的查询方式会占用大量的存储空间,在数据量较大时是不被推荐的,如果要直接选出18列符合条件的,可以用联接查询
内联接
SELECT *
FROM titles inner join publishers on (titles.pub_id=publishers.pub_id)
–这样可以直接选出18行符合条件的
举例
多表查询进行内连接时
SELECT *
FROM titles inner join publishers on titles.pub_id=publishers.pub_id
inner join titleauthor on titles.title_id=titleauthor.title_id
inner join authors on authors.au_id=titleauthor.au_id
加入新表用inner join,on后加联接条件
外联接
左向外联接
SELECT *
FROM discounts LEFT OUTER JOIN stores ON (stores.stor_id=discounts.stor_id)
–左向外联接,LEFT OUTER JOIN联接表,ON加联接条件,左向外联接表示不论右方表内是否符合条件的元素,左侧均全部输出
如上例,不论是否有商店打了折扣,所有折扣列均会输出
右向外联接
同理,关键字为 right outer join
SELECT *
FROM discounts RIGHT OUTER JOIN stores ON (stores.stor_id=discounts.stor_id)
全外连接
不论双方是否有匹配条件的元素,均全部输出
SELECT *
FROM discounts FULL OUTER JOIN stores ON(stores.stor_id=discounts.stor_id)
交叉连接
SELECT *
FROM discounts CROSS JOIN stores
效果与直接多表查询相同
即:
SELECT *
FROM discounts,stores