1、基础筛选
select * from [dbo].[sl] where country='美国' and recommand='五';
2、SQL中的匹配模式
s like p //s:字符串,p:模式,即一个可能使用了两个特殊字符%和_的字符串
select title from Movies where title like 'Star ____';
//这个查询是查找那些电影名称由九个字符组成,开始的五个字符是Star加一个空格,后面四个字符可以是任意的四个字符,因为每一个_可以匹配任何一个字符。
--------------------------------
select title from Movies where title like '%s%';//长度不受限制
3、日期和时间
日期和时间常量分别由保留字Data和Time后跟一个单引号字符串组成。
Data'2017-7-26'
Time'18:03:06.5'//我该下班了
TimeStamp'2017-7-26 18:03:06.5'
4、SQL中的积和连接
Movies(title,year,gener,studioName,produceC#)
MovieExec(name,address,cert#,netWorth)
select MovieExec.name from Movies ,MovieExec where Movies.title='Star Wars' and Movies.produceC#=MovieExec.cert#;
---------------------------
select star1.name,star2.name from MovieStars as star1,MovieStars as star2 where star1.address=star2.address and star1.nameas 可以省略
5、union,intersect,except(并,交,补)
union取(两个集合的并集)两张表的并集
UNION ALL会列出所有值
6、join
Movies(title,year,length,gener,studioName,producerC#)
StarsIn(movieTitle,movieYear,starName)
1). cross join 交叉连接,和笛卡尔积和“积”是同样的意思
Movies cross join StarsIn; ------------------
Movies join StarsIn on Movies.title=StarsIn.movieTitle;
3).外连接
它是一种通过在悬浮元组中填充空值来使之成为查询结果。
(3.1)full outer join
(3.2)left outer join
会返回左表中的所有行,如果右表中对应的行没有值,则返回为null
(3.3)right outer join
会返回右表中的所有行,如果左表中对应的行没有值,则返回为null
7、子查询
当某个查询是另外一个查询的一部分时,称之为子查询。子查询还可以拥有下一级子查询。
select title from Movies,Old where year<ANY (SELECT year from Movies where title=Old.title );
__________________________
select name from MovieExec,(SELECT producerC# from Movies,StarsIn where title=movieTitle and year=movieYear and starName='Harrison Ford' )Prod //Prod 别名 WHERE cert#=Prod.producerC#;
8、IN,ALL,ANY,EXISTS
8.1)IN
允许我们在where子句中规定多个值
select * from person where lastName in ('Adams','Carter');
8.2) any 和all
any表示只要有一个满足就返回true,all表示必须全部都满足才返回true
select * from person where lastName in ('Adams','Carter') and age > any (select age from person2 where country='CN');
————————————————————————————
select * from person where lastName in ('Adams','Carter') and age > all(select age from person2 where country='CN');
9、聚集操作
五个聚集操作符为:SUM(),AVG(),MIN(),MAX(),COUNT()
select count(distinct starName) from StarsIn;
10、分组
在where子句后面加上一个growp by子句可以对元组进行分组。保留字group by 后面跟着一个分组属性列表。
错误:该列没有包含在聚合函数或 GROUP BY 子句中
原因:报错的列要么必须放在select的聚合函数里面,要么必须出现在group by子句中
select author,name,count(distinct country) from sl group by author //报错 -------------------- select author,name,count(distinct country) from sl group by author,name //出现在group by子句中 ———————————————————— select author,count(distinct country) from sl group by author //不出现在select中,或者根据实际情况利用聚合函数
11、HAVING子句
SQL中有HAVING子句存在的原因是,where关键字无法和合计函数一起使用(我认为合计函数和聚合函数是一个概念,但是没找到说明的地方)
select author,sum(age),count(distinct country) from sl group by author having sum(age)<1000; //可用于聚合函数的条件操作
12、SQL中的事物
(1)原子性
即要执行的操作,要么全部被执行,要么都不执行,只有所有的工作都完成之后才将修改提交到数据库,于是所有改变成为数据库的一部分,并且对其他操作可见。
(2)事务
事务是必须原子地执行的一个或多个数据库操作的集合;要么所有操作都被执行,要么所有操作都不执行。SQL要求默认事务可以串行化方式执行。在查询界面,每一条语句就是一个事务,同时也允许程序员将几条数据组成一个事务。
(3)读脏数据
脏数据:表示还没有提交的事务所写的数据的通用术语。脏读:对脏数据的读取。