SELECT col_one,col_two
FROM table_name
WHERE col_name ISNOT NULL; //WHERENOT col_name = 'Burger'ANDNOT rating <> 6; //NOT最好放在WHERE后面WHERE col_name BETWEEN 10AND60; //比 col_name >= 10 AND col_name <= 60;好WHERE col_name LIKE '%A'; //以A结尾,%匹配任意数量的字符WHERE col_name LIKE '__A'; //以A结尾,_匹配单个字符WHERE col_name NOTIN ('aa','bb','cc');
GROUPBY first_name; //这个列中的值会多次出现,将该列中重复出现的值汇总起来ORDERBY title ASC, other_col DESC; //按title升序,按other_col降序排列
LIMIT 2; //仅限前2个数据
LIMIT 0,4; //从索引0开始,选取后面的4个行
联结语句和子查询
*交叉联结
toys表
toy_id
toy
1
hula hoop
2
balsa glider
3
toy soldiers
4
harmonica
5
baseball cards
boys表
boy_id
boy
1
Davey
2
Bobby
3
Beaver
4
Richie
//交叉联结 ---> 组合SELECT t.toy, b.boy
FROM toys AS t
CROSSJOIN
boys AS b;
*集合论
//UNION返回一个并集去重
SELECT title FROM jb_current
UNIONSELECT title FROM jb_desired
UNIONSELECT title FROM job_listings
ORDERBY title;
//UNION ALL返回一个并集不去重
SELECT title FROM jb_current
UNIONALLSELECT title FROM jb_desired
UNIONALLSELECT title FROM jb_listings
ORDERBY title;
//从集合创建表
CREATETABLE my_union ASSELECT title FROM job_current
UNIONSELECT title FROM job_desired;
//INTERSECT返回交集
SELECT title FROM job_current
INTERSECTSELECT title FROM job_desired;
//EXCEPT返回A中删除与B有交集的部分
SELECT title FROM job_current
EXCEPTSELECT title FROM job_desired;
SELECT g.girl, t.toy
FROM toys t
RIGHTOUTERJOIN girls g
ON g.toy_id = t.toy_id;
girl
toy
Cindy
hula hoop
Jane
toy soldiers
Sally
harmonica
*内联结,自然联结,自联结
my_contacts
contact_id(主键)
name
phone
email
prof_id(外键)
profession
prof_id(主键)
profession
//内联结语句,将profession表中的profession列根据prof_id联结进入my_contacts表
SELECT mc.name, mc.phone, p.profession
FROM my_contacts mc
INNERJOIN
profession p
ON mc.prod_id = p.prod_id;/*根据这个条件来联结表,也可以根据条件,把=改成<>。*/
//自然联结,根据两张表中名字相同的列来内联结
SELECT mc.name, mc.phone, p.profession
FROM my_contacts mc
NATURALJOIN
profession p;
//自联结
SELECT c1.name, c2.name AS boss
FROM clown_info c1 /*把一张表当成两张来联结
INNERJOIN clown_info c2 */
ON c1.boss_id = c2.id;
*子查询
子查询都是单一SELECT语句
会出现在:1.SELECT子句中。2.列选择中。3.FROM子句中。4.HAVING子句中。
子查询能与INSERT, DELETE, UPDATE, SELECT一起用。
my_contacts
contact_id(主)
name
phone
prod_id(外键)
zip_code(外)
job_current
contact_id(主+外)
title
salary
start_date
job_desired
contact_id(主+外)
title
salary_low
salary_high
available
years_exp
contact_interest
contact_id(外)
interest_id(外)
interests
interest_id(主)
interest
contact_seek
contact_id(外)
seeking_id(外)
seeking
seeking_id(主)
seeking
profession
prof_id(主)
professioin
zip_code
zip_code(主)
city
province
job_listings
job_id(主)
title
salary
zip
description
//子查询 ==> 查询符合job_listings表中要求的人的信息SELECT mc.name, mc.phone, jc.title
FROM job_current jc
NAUTRAL JOIN
my_contacts mc
WHERE jc.title IN
(SELECT title FROM job_listings
GROUPBY title
ORDERBY title
);
//子查询 ==> 选出薪水最高的一个人SELECT mc.name, jc.salary
FROM my_contacts mc
NATURAL JOIN
job_current jc
WHERE jc.salary =
(SELECTMAX(jc.salary)
FROM job_current jc);
//子查询 ==> 选出每一行的名字,手机,城市SELECT mc.name, mc.phone,
(SELECT zc.city
FROM zip_code zc
WHERE mc.zip_code = zc.zip_code) AS city
FROM my_contacts mc;
//关联子查询 ==> 选出有3个兴趣爱好的人SELECT mc.name
FROM my_contacts mc
WHERE3= (
SELECT COUNT(*) FROM contact_interest
WHERE contact_id = mc.contact_id
);
//返回至少有一项兴趣爱好,但是名字不在job_current的人的emailSELECT mc.email
FROM my_contact mc
WHERE EXISTS
(SELECT* FROM contact_interest ci WHERE mc.contact_id = ci.contact_id)
ANDNOT EXISTS
(SELECT* FROM job_current jc
WHERE mc.contact_id = jc.contact_id);
*联结与子查询的比较
//1.......
SELECT mc.name, mc.phone, jc.title
FROM job_current jc
NATURALJOIN
my_contacts me
INNERJOIN job_listings jl
ON jc.title = jl.title;SELECT mc.name, mc.phone, jc.title
FROM job_current jc
NATURALJOIN
my_contacts me
WHERE jc.title IN(
SELECT title
FROM job_listings);
//把自联结变成子查询
SELECT c1.name, c2.name AS boss
FROM clown_info c1
INNERJOIN clown_info c2
ON c1.boss_id = c2.id;SELECT c1.name,
(SELECT name FROM clown_info
WHERE c1.boss_id = id) AS boss
FROM clown_info c1;