SQL学习之高级篇

目录

1、SQL SELECT TOP, LIMIT, ROWNUM

2、SQL LIKE 运算符

3、SQL IN 运算符

4、SQL BETWEEN 运算符

 5、SQL 通用数据类型

SQL 语句快速参考 

1、SQL SELECT TOP, LIMIT, ROWNUM

  • SELECT TOP 子句用于指定要返回的记录数量。
  • SELECT TOP子句在包含数千条记录的大型表上很有用。返回大量记录会影响性能。

MySQL语法:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  1. 在SQL中,LIMIT 和 OFFSET 一起用来限制查询返回的记录数,并且指定从哪一条记录开始返回。LIMIT 指定返回的记录数,而 OFFSET 指定在开始返回记录之前要跳过的记录数。语法格式:LIMIT count OFFSET count1
  2. LIMIT m,n ; 表示从第m+1条开始,取n条数据。
  3. LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。

2、SQL LIKE 运算符

 在WHERE子句中使用LIKE运算符来搜索列中的指定模式。 

 有两个通配符与LIKE运算符一起使用:

  •  - 百分号表示零个,一个或多个字符
  • _ - 下划线表示单个字符

 注意: MS Access使用问号(?)而不是下划线(_)。百分号和下划线也可以组合使用!

SQL LIKE 语法

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

提示:您还可以使用AND或OR运算符组合任意数量的条件。

下面是一些使用'%'和'_'通配符显示不同LIKE运算符的例子:

LIKE 运算符 描述
WHERE CustomerName LIKE 'a%' 查找以“a”开头的任何值
WHERE CustomerName LIKE '%a' 查找以“a”结尾的任何值
WHERE CustomerName LIKE '%or%' 在任何位置查找任何具有“or”的值
WHERE CustomerName LIKE '_r%' 在第二个位置查找任何具有“r”的值
WHERE CustomerName LIKE 'a_%_%' 查找以“a”开头且长度至少为3个字符的值
WHERE ContactName LIKE 'a%o' 找到以"a"开头,以"o"结尾的值

3、SQL IN 运算符

 IN 运算符允许您在 WHERE 子句中指定多个值。

 IN 运算符是多个 OR 条件的简写。

SQL IN 语法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

或者

SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);

4、SQL BETWEEN 运算符

 BETWEEN运算符用于选取介于两个值之间的数据范围内的值。

 BETWEEN运算符选择给定范围内的值。值可以是数字,文本或日期。

 BETWEEN运算符是包含性的:包括开始和结束值,且开始值需小于结束值。 

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

 要否定BETWEEN运算符的结果,可以添加NOT运算符:

SELECT column_name(s)
FROM table_name
WHERE column_name NOT BETWEEN value1 AND value2;

请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在一些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在一些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在一些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。

因此,请检查您的数据库是如何处理 BETWEEN 操作符!

 5、SQL 通用数据类型

SQL 中通用的数据类型:

数据类型 描述
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n) 或
CHARACTER VARYING(n)
字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或
BINARY VARYING(n)
二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据
SQL 语句快速参考 
SQL 语句 语法
AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE ALTER TABLE table_name
ADD column_name datatype

or

ALTER TABLE table_name
DROP COLUMN column_name

AS (alias) SELECT column_name AS column_alias
FROM table_name

or

SELECT column_name
FROM table_name AS table_alias

BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEX CREATE INDEX index_name
ON table_name (column_name);

or

CREATE UNIQUE INDEX index_name
ON table_name (column_name);

CREATE VIEW CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
DELETE DELETE FROM table_name
WHERE some_column=some_value;

or

DELETE FROM table_name;

DELETE * FROM table_name;

(删除整张表格!)

DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLE DROP TABLE table_name
GROUP BY SELECT column_name, aggregate_function(column_name) -- 聚合函数
FROM table_name
WHERE column_name operator value  -- 比较操作符
GROUP BY column_name
HAVING SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,....)

or

INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)

INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name = table_name2.column_name
LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name = table_name2.column_name
RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name = table_name2.column_name
FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
LIKE SELECT column_name(s)
FROM table_name
WHERE column_nameLIKE pattern
ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT SELECT column_name(s)
FROM table_name
SELECT * SELECT *
FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name

or

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name

SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLE TRUNCATE TABLE table_name
UNION SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATE

UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value

or

UPDATE table_name   AS  t1

SET   column =  (

        SELECT   column1

        FROM   table_name2  AS  t2

        WHERE  t1.column2  =  t2.column2

)

WHERE SELECT column_name(s)
FROM table_name
WHERE column_name operator value

你可能感兴趣的:(sql,学习,数据库)