SQL 基础语句大全

xiaoxiao2021-02-28  112

本文是个人对<SQL必知必会>的总结概括 

数据库基础

模式schema,关于数据库和表的布局及特性的信息

主键 primary key一列或一组列,其值能唯一标识表中每一行。应该总是定义主键。

主键条件:

1.任意两行都不具有相同的主键值。

2.每一行都必须具有一个主键值(主键列不允许NULL值)。

3.主键列中的值不允许修改或更新。

4.主键值不能重用,如果某行从表中删除,它的主键不能赋给以后的行。

多条SQL语句用分号;分隔,不区分大小写,使用空格都会被忽略。

数据类型及其名称是SQL数据库不兼容的一个主要原因

SQL注释: --这是一条注释

         #这是一条注释

         /*这是一条注释*/

 

检索数据 – Select

检索单个列:

SELECT列名 FROM表名

注:返回数据没有特定顺序

检索多个列:

SELECT列名1,列名2… FROM表名

检索所有列:

SELECT * FROM表名

检索不同的值:

SELECT DISTINCT列名 FROM表名

注:DISTINCT只返回不同的值(过滤掉重复的),必须放在列名前面,且作用于后边所有的列。

限制返回的行数 (数据库不同语法不同)

SQL Server:SELECT TOP 5列名 FROM表名

PostgreSQL:SELECT列名FROM表名 LIMIT 5

 

排序检索数据

关系型数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意义

按单个列排序:

SELECT列名 FROM表名 ORDER BY列名

注:指定一条ORDER BY子句时候,应该保证它是SELECT语句的最后一条子句。

否则会出现错误信息。

按多个列排序:

SELECT列名1,列名2, 列名3 FROM 表名ORDER BY列名1,列名2

注释:先按照列名1排序,如果列名1相同再按列名2排序。

按照位置排序:

SELECT列名1,列名2, 列名3 FROM 表名ORDER BY 2,3

注释:按照SELECT清单里面的第2列(列名2)和第3列(列名3)排序。最好不要这么用,因为不明确给出列名可能造成用错列,再就是如果对SELECT清单做修改后容易忘记修改响应的列号。

升降序排序:ASC DESC

升序ASC不需要指定,因为是默认

DESC/ASC应用于直接位于其前面的列名,而不是所有列。如果想在多个列上进行降序排序,必须对每一个列指定DESC关键字。

SELECT列名1,列名2,列名3 FROM表名 ORDER BY 列名1 DESC,列名2 DESC

注:Aa相同么?a位于B之前还是Z之后?答案取决于数据的设置方式。

 

过滤数据

WHERE子句

SELECT列名1,列名2 FROM表名 WHERE 列名=

 

尽量在数据库端过滤数据。而让客户端应用(或开发语言)处理数据将会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,如果在客户端过滤数据,服务器不得不通过网络发送多余的数据,导致网络带宽的浪费。

WHERE操作符

=   (等于)

<>  (不等于)

=(不等于)

<   (小于)

<=  (小于等于)

!<  (不小于)

>   (大于)

>=  (大于等于)

!>  (不大于)

BETWEEN  (在指定的两个值之间)

IS NULL  (为NULL

注:并非所有的数据库都支持这些操作符,参见相关文档。

BETWEEN AND例子

SELECT prod_name, prod_price

FROM Products

WHERE prod_price BETWEEN 5 and 10

IS NULL例子

SELECT cust_name

FROM Customers

WHERE cust_email IS NULL

 

高级数据过滤

WHERE + AND指定同时满足多个条件

SELECT prod_id,prod_price,prod_name

FROM Products

WHERE vend_id = ‘DLL01’AND prod_price <= 4

WHERE + OR指定匹配任何一个条件即可

SELECT prod_name, prod_price

FROM Products

WHERE vend_id =DLL01’OR vend_id = ‘BRS01’;

注:AND的优先级大于OR

可以使用圆括号对多个操作符进行明确分组

SELECT prod_name, prod_price

FROM Products

WHEREvend_id =DLL01’OR vend_id = ‘BRS01’AND prod_price >= 10

WHERE + IN

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔,括在圆括号中的合法值。

SELECT prod_name, prod_price

FROM Products

WHERE vend_id IN (‘DLL01’,’BRS01’)

ORDER BY prod_name;

注:WHERE+INWHERE+OR功能相同,但执行更快。

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后边所跟的任何条件。一般可用不等(<>,!=)来代替

SELECT prod_name

FROM Products

WHERE NOT vend_id = ‘DLL01’

ORDER BY prod_name

等于

SELECT prod_name

FROM Products

WHERE vend_id <> ‘DLL01’

ORDER BY prod_name

 

 

通配符过滤

使用通配符搜索,必须使用LIKE操作符。且通配符搜索只能用于文本字段(字符串),而不能用于非文本类型。

%通配符

表示任何字符出现任意次数

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE ‘Fish%’

表示以Fish开头的任意字符串。

注:%通配符能匹配0个字符,但不能匹配NULL

通配符可以在任意位置使用,且可以使用多个通配符。

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE ‘

转载请注明原文地址: https://www.6miu.com/read-48532.html

最新回复(0)