笔记|MySQL基本命令之查询语句(3)

对上一篇关于MySQL查询语句的补充,今天的笔记是高级查询语句。

说明:MySQL中不区分大小写。

多表查询:连接查询是关系数据库重要的查询,主要包括内连接,外连接等,通过连接运算符可以实现多个表的查询。

1.内连接查询:SELECT  <列名1,列名2,...列名N> FROM <表名1> INNER JOIN <表名2> [ON子句];

说明:①内连接是利用条件表达式来消除交叉连接的某些数据行,如果没有任何条件,INNER JOIN和CROSS JOIN在语法上是等同的,两者可以互换。②<表名1>,<表名2>是进行内连接的两张表的表名。③在FROM子句中可以在多个表之间连续使用INNER JOIN或JOIN,可以同时实现多个表的内连接。

2.外连接查询:可以分为左外连接和右外连接。

左外连接:SELECT <列名1,列名2,...列名N> FROM <表名1> LEFT OUTER JOIN <表名2> [ON子句];

右外连接:SELECT <列名1,列名2,...列名N> FROM <表名1> RIGHT OUTER JOIN <表名2> [ON子句];

说明:①左外连接又称左连接,在FROM子句中使用关键字LEFT OUTER JOIN 或者LEFT JOIN,用于接收该关键字左表(基表)的所有行,并用这些行与该关键字右表(参考表)中的行进行匹配。②在左外连接的结果集中,除了匹配的行之外,还包括左表中有但在右表中不匹配的行,对于这样的行,从右表中选择的列的值被设置为NULL,即左外连接的结果集中的NULL值表示右表中没有找到与左表相符的记录。③右外连接又称为右连接,在FROM子句中使用RIGHT OUTER JOIN或者RIGHT JOIN。④与左外连接相反,右外连接以右表为基表,连接方法和左外连接相同。在右外连接的结果集中,除了匹配的行外,还包括右表中有但在左表中不匹配的行,对于这样的行,从左表中选择的值被设置为NULL。

3.自连接查询:如果需要在一个表中查找具有相同列值的行,就可以考虑用自连接。注意,在使用自连接的时候,需要为表指定两个不同的别名,且对所有查询列的引用必须使用表别名的限定,否则SELECT操作会失败。

例如:mysql> SELECT s1.id, s1.name
                   -> FROM tb_students s1, tb_students s2
                   -> WHERE s1.dept_id=s2.dept_id
                   -> AND s2.id = 1;

4.子查询:

子查询常用的运算符:

①IN子查询:结合关键字IN所使用的子查询主要用于判断一个给定值是否存在于子查询的结果集中。

<表达式> [NOT] IN <子查询>

②比较运算符子查询:比较运算符所使用的子查询主要用于对表达式的值和子查询返回的值进行比较运算。

<表达式> {= | < | > | >= | <= | <=> | < > | ! = } { ALL | SOME | ANY} <子查询>

说明:关键字ALL用于指定表达式需要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较关系时,会返回TRUE,否则返回FALSE;关键字SOME和ANY是同义词,表示表达式只要与子查询结果集中的某个值满足比较关系,就返回TRUE,否则返回FALSE。

③EXIST子查询:关键字EXIST所使用的子查询主要用于判断子查询的结果集是否为空。

EXIST <子查询>

说明:EXISTS关键字可以和条件表达式一起使用。

5.分组查询:GROUP BY {<列名>|<表达式>|<位置>} [ASC|DESC]

说明:GROUP BY子句列出的每个列都必须是检索列或有效的表达式,但不能是聚合函数。若在SELECT语句中使用表达式,则必须在GROUP BY子句中指定相同的表达式。注意,不能使用别名。

6.使用HAVING关键字设置条件:HAVING <条件>

说明:条件是过滤条件。HAVING 子句主要用于过滤分组。

7.使用正则表达式的查询:正式表达式通常被用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文中符合要求的特殊字符串,MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值