MySQL:SELECT 语句

SELECT FROM语句

在 MySQL 中,可以使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。

语法格式:

SELECT * / select_list1 (, select_list2, ...) 
FROM table_name1 (, table_name2, ...);
'''
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]'''
  • SELCECT:需要查询的字段可以为一个或多个

  • 使用 * 可以查询所有字段 ,使用’ * '查询时,只能按照数据表中字段的顺序进行排列,不能改变字段的排列顺序

  • 如果忘记了字段名称,可以使用DESC命令查看表的结构

  • FROM:查询数据的来源,可以为一个或多个表

当执行 SELECT 语句时,MySQL在 SELECT 子句之前先执行 FROM 子句

SELECT 语句

可以单独使用 SELECT 语句来执行一些简单的操作

SELECT 1+1;
'''
+-------+
| 1 + 1 |
+-------+
|     2 |
+-------+
1 row in set (0.00 sec)    
'''

可以借助 SELECT 语句来执行 MySQL 中的内置函数:

SELECT NOW();
'''
+---------------------+
| NOW()               |
+---------------------+
| 2021-07-26 08:08:02 |
+---------------------+
1 row in set (0.00 sec)
'''

SELECT CONCAT('John',' ','Will');
'''
+--------------------------+
| CONCAT('John',' ','Will') |
+--------------------------+
| John Will                 |
+--------------------------+
1 row in set (0.00 sec)
'''

dual table

使用 SELECT FROM dual 这样的语法来执行一个简单的查询,即从名为 dual 的虚拟表中检索数据。

虚拟表 dual 是一个特殊的表,通常只包含一行和一列,并且在没有实际表可用时用作占位符。

语法结构:

SELECT expression
FROM dual;

由于虚拟表 dual 只包含一行一列,因此无论在查询中使用的表达式或函数返回什么结果,都只会得到一行结果

这种语法特别适用于需要计算一些值或执行简单的查询操作,而无需实际的表存在的情况。

SELECT CURDATE() AS curdate
FROM dual;

'''
+------------+
| curdate    |
+------------+
| 2023-09-23 |
+------------+
1 row in set (0.03 sec)
'''

AS 设置别名

为了查询方便,可以使用 AS 关键字来为表和字段指定别名。

语法格式:

SELECT expression AS column_alias;
  • AS 关键字可以省略,省略后需要将表名/字段名 用空格隔开
为字段设置别名
  • 无法在 WHERE 语句中使用,条件表达式中不能使用字段的别名,否则会出现“ERROR 1054 (42S22): Unknown column”这样的错误提示信息。
    因为Mysql 会先执行WHERE再执行 SELECT

  • 设置别名后,可以在[[Sorting data in Tables|ORDER BY]]、 GROUP BY、 HAVING 语句中使用别名来指代字段。

也可以在执行函数后为字段设置别名:

SELECT
   CONCAT_WS(', ', lastName, firstname) AS `Full name`
FROM
   employees;
为表设置别名
  • 表的别名不能与该数据库的其它表同名。字段的别名不能与该表的其它字段同名。

  • 表别名只在执行查询时使用,并不在返回结果中显示。而字段定义别名之后,会返回给客户端显示,显示的字段为字段的别名

  • 为表设置别名后,也可以在[[Subqueries 子查询|子查询]]的 INNER JOINLEFT JOIN
    RIGHT JOIN 语句中使用别名

为表设置别名后,可以通过以下方式访问表中字段:

table_name AS alias_name;
table_name.column_name;

'''示例'''
SELECT 
    e.firstName, 
    e.lastName
FROM
    employees e
ORDER BY e.firstName;

若遇到两个表具有相同字段名的情况下,在子查询时会报错:

Error Code: 1052. Column 'customerNumber' in on clause is ambiguous

为避免这种错误,可以为表设置一个别名来限定相同字段名的列;若不使用这种方法,则需要用 table_name.column_name 的方法来访问目标字段,这大大降低了可读性。

SELECT
	customerName,
	COUNT(o.orderNumber) total
FROM
	customers c
INNER JOIN orders o ON c.customerNumber = o.customerNumber
GROUP BY
	customerName
ORDER BY
	total DESC;
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值