基本查询过滤:可以用来查询所有字段数据或指定一个字段或者多个字段
SELECT * FROM USER;#查询所有字段数据
SELECT NAME,sex,age FROM USER;#查询一个或多个字段数据
条件查询过滤
AND(与)、OR(或)、IN(在范围内)、NOT IN(不在范围内)、BETWEEN AND(在..区间)
模糊查询过滤
SELECT * FROM USER NAME LIKE '张%';#LIKE '张%':查询该字段以“张”开头的数据
SELECT * FROM USER NAME LIKE '%张';#LIKE '%张':查询该字段以“张”结尾的数据
SELECT * FROM USER NAME LIKE '%张%';#LIKE '%张%':查询含字段以“张”的数据
内连接查询
内连接查询分为等值连接查询和非等值连接查询,它使用关键字inner JOIN ON,inner关键字可以省略。它是从左表中取出每一条记录,去与右表中所有的记录进行匹配,匹配成功后才会保留结果,否则不保留结果。
SELECT*FROM左表[INNER]JOIN右表ON左表字段=右表字段:
(1)ON关键字表示连接条件,条件字段代表相同的业务含义,如user. id和score.id。
(2)内连接可以没有连接条件,没有ON之后的内容,这样会保留所有结果
(3)内连接可以使用WHERE代替ON,通常不用WHERE,因为WHERE没有ON效率高。ON指匹配到第一条成功记录后就结束,(其他记录不匹配,若没有,则不进行匹配;而WHERE《一直匹配,并进行判断》(4)通常使用字段别名、表别名,在查询数据的时候,不同表有同名字段,需要使用别名加以区分。
(5)等值连接:指使用等号“=”比较两个表的连接列的值,取两表连接列的值相等的记录。
(6)非等值连接;指使用大于号“>”或小于号“<”比较两个表的连接列的值,取一个表大于或小于另一个表的连接列值的记录。
SELECT * FROM USER u INNER JOIN score s ON u.id=s.id;#使用等值内连接查询
SELECT * FROM USER u JOIN score s ON u.id=s.id;#省略关键字inner
SELECT u.id uid ,u.name uname,u.sex usex,u.age uage,s.score,s.grade FROM USER u JOIN scores ON u.id=s.id;#使用别名,查询指定字段的别名
SELECT * FROM USER u JOIN score s;#省略on关键字查询,这样会保留所有结果
SELECT * FROM USER u INNER JOIN score s ON u.id>s.id;#使用非等值内连接查询
外连接查询
外连接査询分为左外连接查询和右外连接查询。外连接查询是以一张表为基础,取出里面的所有记录,然后将每条记录与另外一张表进行连接,不管能不能匹配上,最终都会保留。也就是说,能匹配,正确保留;不能匹配,其他表的字段都置空null,它是使用关键字outer JOINON进行连接查询的。
SELECT*FROM左表LEFT/RIGHT』JOIN右表ON左表字段=右表字段;
(1)LEFT JOIN也可写成 LEFT OUTER JOIN ,左连接查询返回左表中符合条件的所有行,如果左表中的某行记录在右表中没有匹配,那么在结果集中,相关右表的列显示为空null。
(2)RIGHT JOIN也可写成 RIGHT OUTER JOIN ,右连接查询返回所有符合条件的右表记录,如果右表中的记录在左表中找不到匹配,那么相关左表的列显示为空null。
(3)ON后面的条件内容不可以省略。
SELECT * FROM USER u LEFT JOIN score s ON u.id=s.id;#左外连接,省略outer
SELECT * FROM USER u RIGHT JOIN score s ON u.id=s.id;#右外连接,省略outer
SELECT * FROM USER u LEFT OUTER JOIN score s ON u.id=s.id;#左外连接,不省略outer
SELECT * FROM USER u RIGHT OUTER JOIN score s ON u.id=s.id;#右外连接,不省略outer
自然连接查询
自然连接查询在连接的两个表中的列名称相等时才能使用,MySQL以同名字段作为字段进行匹配,它使用关键字natural JOIN进行自然连接,这种连接很少使用。自然连接又可以分为自然内连接和自然外连接。
SELECT * FROM 左表 LEFT/RIGHT INNER JOIN 右表 ON using(字段名)
自然内连接示例:
SELECT * FROM user NATURAL JOIN score;
自然左外连接示例:
SELECT * FROM user NATURAL LEFT JOlN score;
自然右外连接示例:
SELECT * FROM user NATURAL RIGHT JOIN score;
外连接模拟自然左外连接示例:
SELECT * FROM user LEFT JOIN score using(id);
SELECT * FROM USER NATURAL JOIN score;#自然内连接
SELECT * FROM USER NATURAL LEFT JOIN score;#自然左外连接
SELECT * FROM USER NATURAL RIGHT JOIN score;#自然右外连接
SELECT * FROM USER LEFT JOIN score USING(id);#外连接模拟自然左外连接
交叉连接查询
交叉连接查询是从一张表中循环取出每一条记录,然后将每条记录都在另外一张表中进行匹配,匹配结果都会保留,而连接本身字段会增加,其最终结果称为笛卡尔积,它是使用关键字CROSSJOIN来进行叉连接查询的,
SELECT * FROM USER 左表 CROSS JOIN 右表或RROM左表,
SELECT * FROM USER CROSS JOIN score;#交叉连接查询,使用关键字cross join
SELECT * FROM USER,score;#交叉连接查询,from两个表
联合查询
联合查询是将多次查询结果合并起来进行拼接,其字段不会增加,要求两次查询的列数必须一致,列的类型可以不一样,多次SQL语句取出的列名可以不一致《此时以第一个SQL语句的列名为准,使用关键字UNION进行联合查询,会去掉重复的行,使用关键字UNIONaH进行联合查询,不会去掉重复的存在。ORDSYBY不能直接使用,需要对查询语句使用括号才行,要ORDERBY生效,就必须搭配UMIT,LMTP使用限定的最大数即可,推荐放到所有子旬之后,即对最终合并的结果来排序或筛选。
SELECT column _ name FROM table1
UN1ON(all)
SELECT column name FROM table2
联合查询经常用于查询同一个表,但是需求不同,如查询学生信息、男生身高升序、女生身高降序;进行多表查询,多个表的结构是完全一样的,保存的数据(结构)也是一样的。
SELECT id FROM USER
UNION
SELECT id FROM score;#查询user表的id和score表的id
SELECT id,NAME FROM USER
UNION
SELECT id,score FROM score;#查询user表的id、name和score表的id、score
(SELECT id,NAME FROM USER ORDER BY id DESC LIMIT 0,2)
UNION
(SELECT id,score FROM score ORDER BY id DESC LIMIT 0,2);#使用ORDER BY LIMIT需要使用括号()
(SELECT id,NAME FROM USER WHERE age>20)
UNION
(SELECT id,score FROM score WHERE score>80) ORDER BY id LIMIT 0,2;