MySQL的SELECT语句用于从数据库表中检索数据。它有许多选项和子句,可以用来定制查询结果。
-
单表查询:
单表查询只涉及一个表的数据查询。基本语法如下:
SELECT column1,column2,... FROM table_name;
其中,column1,column2,...是你想从表中获取的列的名称,table_name是你想从中获取数据的表的名称。
例如,如果你有一个名为"students"的表,并且你想从中获取"name"和"age"列的数据,你可以这样写:
SELECT name,age FROM students;
心得:在编写SQL查询时,明确你需要哪些字段并确保这些字段存在于所查询的表中是非常重要的。
易错点:忘记在查询结束时添加分号,或者在查询中引用了不存在的列名。
-
定义列别名
-
当希望查询结果中的列使用自己选择的列标题时,可以在列名之后使用AS子
改查询结果的列名,其格式如下。SELECT 列名 [AS] 别名
例如查询 book 表中图书类别为“计算机”的图书书名、作者和出版社,各列的标题分别指定为name、auther和publisher。
SELECT书名 AS name,作者 AS auther,出版社 AS publisher FROM book WHERE 图书类别='计算机';
-
当自定义的列标题中含有空格时,必须使用引号将标题括起来。
SELECT 书名 AS 'Name of Book',作者 AS 'Name of auther',出版社 AS Publisher FROM book WHERE 图书类别='计算机';
注意 不允许在WHERE子句中使用列别名,这是因为执行WHERE 代码时,可能尚未确定列值。例如,下述查询是非法的。
SELECT 性别 AS SEX FROM members WHERE SEX='男';
-
-
WHERE子句
多表查询:
多表查询涉及到多个表的数据查询。这通常通过使用JOIN子句来实现。基本语法如下:
SELECTcolumn1,column2,...FROM table1 JOIN table2 ON table1.common_field = table2.common_field;
其中,table1和table2是你想要从中获取数据的表的名称,common_field是这两个表中都有的字段,用于连接这两个表。
例如,如果你有一个名为"students"的表和一个名为"courses"的表,并且你想从这两个表中获取数据,你可以这样写:
心得:在进行多表查询时,理解表之间的关系(如一对多、多对多等)以及如何正确地连接这些表是非常重要的。
易错点:在连接表时,确保你正在连接的字段在两个表中都存在,并且它们的数据类型相同。
-
语句格式如下
WHERE <判定运算>
-
判定运算
结果为TRUE、FALSE或UNKNOWN格式如下麦达式{= ㄧ<|<= |> |>= |<=> |<>|!= }表达式 /*比较运算*/ |表达式[NOT ]LIKE 表达式 /*LIKE 运算符*/ !表达式[NOT]BETWEEN 表达式1 AND 表达式2 /*指定范围*/ |表达式IS [NOT] NULL /*判断是否空值*/*IN 子句* |表达式[ NOT ] IN( 子査询 |表达式1【,…表达式n])/*IN子句*/
WHERE子句会根据条件对FROM子的间结果中的行逐一进行判断,当条件为TRUE的时候,一行就被包含到WHERE 子句的中间结果中。
在SOL中,返回逻辑值(TRUE或FALSE)的运算符或关键字都可称为谓词,判定运算包括比较运算、逻辑运算、模式匹配、范围比较、空值比较和子查询。 -
比较运算
比较运算用于比较两个表达式的值,MySOL支持的比较运算符有=(等于)<(小于)<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)◇(不等于)及!(不等于)。麦达式{= ㄧ<|<= |> |>= |<=> |<>|!= }表达式
表达式是除 text 和 blob 类型以外的表达式。
例如查询 Bookstore 数据库 book 表中书名为“网页程序设计”的记录。
当两个表达式的值均不为空值(NULL)时,除了“<->”运算符,其他比较运算返回逻辑值 TRUE(真)或FALSE(假);而当两个表达式的值中有一个为空值或都为空值时,将返回 UNKNOWN。SELECT FROM book WHERE书名='网页程序设计';
查询 book 表中单价大于30 元的图书情况
SELECT * FROM book WHERE单价>30;
MySQL 有一个特殊的等于运算符“<=>”,当两个表达式彼此相等或都等于空值时它的值为 TRUE;其中有一个空值或都是非空值但不相等的,其值为FALSE,没有UNKNOWN 的情况。
-
-
-
MySQL中的内连接(INNERJOIN)和外连接(OUTERJOIN)是两种常用的表连接方式,它们用于将两个或多个表中的数据组合在一起。
-
内连接(INNERJOIN):内连接只返回两个表中满足连接条件的记录。如果某个表中的行在另一个表中没有匹配的行,则不会包含在内。
SELECTa.column1,b.column2FROMtable1a INNER JOIN table2b ON a.common_column = b.common_column;
-
- 外连接(OUTERJOIN):外连接分为左连接(LEFTJOIN)、右连接(RIGHTJOIN)和全连接(FULLJOIN)。左连接返回左表中的所有记录,即使在右表中没有匹配的记录;右连接返回右表中的所有记录,即使在左表中没有匹配的记录;全连接返回两个表中所有的记录,如果没有匹配的记录,则用NULL填充。
-
左连接(LEFTJOIN)
SELECT a.column1,b.column2 FROM table1 a LEFTJOIN table2 b ON a.common_column=b.common_column;
-
右连接(RIGHTJOIN)
SELECT a.column1,b.column2 FROM table1 a RIGHTJOIN table2 b ON a.common_column=b.common_column;
-
全连接(FULLJOIN):MySQL不支持FULLJOIN关键字,但可以通过UNION操作符来实现类似的功能。
SELECT a.column1,b.column2 FROM table1 a LEFTJOIN table2 b ON a.common_column=b.common_column UNIONSELECT a.column1,b.column2 FROM table1 a RIGHTJOIN table2 b ON a.common_column=b.common_column;
-
总结:编程思路主要包括明确需要查询的数据,确定涉及的表,然后编写适当的SELECT语句。技巧运用主要包括使用正确的语法,避免拼写错误,以及在必要时使用JOIN子句来连接多个表。