每当查询被发送到服务器端时,服务器在执行语句之前将会进行下面的检查:
用户是否有权限执行该语句?
用户是否有权限访问目标数据?
语句的语法是否正确?
Select 子句是select 语句中的第一个组成部分,但实际上在数据库服务器中,它是最后被评估的。因为在确定结果集最后包含哪些列之前,必须先要知道结果集所有可能包含的列。
mysql> select version(),user(),database();
+---------------------+----------------+------------+
| version() | user() | database() |
+---------------------+----------------+------------+
| 5.0.45-community-nt | root@localhost | NULL |
+---------------------+----------------+------------+
1 row in set (0.03 sec)
// distinct去掉重复行,默认为显示所有记录,或用关键字all,常省略
Select distinct name from tab;
表:永久表(create table语句创建的表),临时表(子查询所返回的表),虚拟表(使用create view子句所创建的视图)。
//子查询产生的表
mysql> select t.id,post_type from (select * from wp_posts) t;
+----+-----------+
| id | post_type |
+----+-----------+
| 1 | post |
| 2 | page |
| 3 | post |
| 4 | post |
+----+-----------+
4 rows in set (0.02 sec)
视图是存储在数据字典中的查询,它的行为表现得像一个表,但实际上并不拥有任何数据。当发出一个对视图的查询时,该查询会被绑定到视图定义上,以产生最终被执行的查询。
mysql> create view view_test as select * from wp_posts;
Query OK, 0 rows affected (0.01 sec)
mysql> select id,post_type from view_test;
+----+-----------+
| ID | post_type |
+----+-----------+
| 2 | page |
| 3 | post |
| 4 | post |
| 1 | post |
+----+-----------+
4 rows in set (0.00 sec)
Order by
升序或降序排序:asc升,desc降,默认为升。
根据表达式排序:order by right(fed_id, 3)。
根据数字占位符排序:如果需要根据select子句中的列来排序,那么可以选择使用该列位于select子句中的位置号来替代列名。如:order by 2, 5 表示根据查询返回的第2个和第5个列排序。不常用。