T-SQL筆記二
TOP:
sql sever中:
SELECT TOP 10 * FROM table_name ---或者 SELECT TOP 10 PERCENT * FROM table_name
PL-SQL不支持top,可用rownum替代:
select * from table_name WHERE ROWNUM<=5
LIKE:
sql sever和Oracle中均可用:
select * from table_name WHERE column_name LIKE 'SA%' ----查詢column_name中值的前兩位為SA的表項。
----不包含就是用 NOT LIKE 。
通配符:
% 、 [charlist] 、 _ 、 [^charlist]
關於[charlist] 例子:
SELECT * FROM table_name WHERE column_name LIKE '[ALN]%' ----查詢以A或者L或者N開始的column_name項 SQL sever中可用。 SELECT * FROM table_name WHERE column_name LIKE '[^ALN]%' ----查詢不以A或者L或者N開始的column_name項 SQL sever中可用。 SELECT * FROM table_name WHERE column_name LIKE '_A%' ----查詢值的第二位是A的column_name項。SQL sever中可用。
BETWEEN AND:
SELECT * FROM table_name WHERE column_name BETWEEN 'A' AND 'D' ------查詢column_name中在A(SQL sever包括)和D(SQL sever包括)之間的數字。
顯示範圍之外用NOT BETWEEN。
【JOIN(INNER JOIN) | LEFT JOIN | RIGHT JOIN | FULL JOIN】 ON:
JOIN和INNER JOIN 是一樣的。返回左右匹配的行。
LEFT JOIN返回左右匹配以及左邊剩下的行。
RIGHT JOIN返回左右匹配以及右邊剩下的行。
FULL JOIN返回左右匹配以及其餘剩下的行。
UNION:
UNION用於和并兩個或兩個以上的數據庫。需要列名數據類型一樣,列數一樣,列名始終以第一表的列名相同。
如果不同表中有相同的值,用UNION ALL可全部顯示。UNION則只列不同值的數據。
SELECT column_name(s) FROM table_name1 UNOIN ALL SELECT column_name(s) FROM table_name2
SELECT INTO FROM & INSERT INTO SELECT(複製表)
sql sever:select into 會自創新表,所以要求要插入的表不存在。而insert into select是插入一個已存在的表。所以可以插入常量進去。但如果常量不存在的時候,它會將所有數據項都當成匹配項進行插入操作。
SELECT * INTO table_bak FROM table --將table中數據與結構都複製給table_bak. INSERT INTO table_bak SELECT * FROM table
注:CREATE TABLE AS 的作用和 SELECT INTO 类似。 建议使用 CREATE TABLE AS 语法, 因为 SELECT INTO 不是标准语法。 实际上,这种类型的 SELECT INTO 是不能在 ECPG 或者 PL/pgSQL 中使用的, 因为它们对 INTO 子句的解释是不同的。 而且,CREATE TABLE AS 提供了一个 SELECT INTO 所提供功能的超集。
Oracle:用create table select代替select into from。select into from 用於給變量賦值。
T-SQL常用約束:
NOT NULL , UNIQUE , PRIMARY KEY , FOREIGN KEY , CHECK , DEFAULT
NOT NULL : 值不為空,一個表中可有多個NOT NULL約束。
a int NOT NULL,
UNIQUE : 值唯一,一個表中可有多個UNIQUE約束。
--第一種方式 a int UNIQUE, --第二種方式 UNIQUE(col_name) --第三種方式 CONSTRAINT unique_col UNIQUE (a,b) --撤銷約束 ALTER TABLE table_name DROP CONSTRAINT unique_col
PRIMARY KEY : 設置主鍵,一個裱中只能有一個PRIMARY KEY約束。
--第一種方式 a int PRIMARY KEY, --第二種方式 PRIMARY KEY(col_name) --第三種方式 CONSTRAINT PK_col PRIMARY KEY(a,b), --撤銷約束 ALTER TABLE table_name DROP CONSTRAINT PK_col
FOREIGN KEY : 設置外鍵,一個表中可有多個FOREIGN KEY約束。
--第一種方式 a int FOREIGN KEY REFERENCES table_name2(col_name) --第二種方式 FOREIGN KEY(col_name) REFERENCES table_name2(col_name2) --第三種方式 CONSTRAINT FK_col FOREIGN KEY(a,b) REFERENCES table_name2(col_name2) --撤銷約束 ALTER TABLE table_name DROP CONSTRAINT FK_col
CHECK : 限定特定列的值範圍, 一個表中可有多個CHECK約束。
--第一種方式 a int CHECK(a>0) , --第二種方式 CHECK(a>0) , --第三種方式 CONSTRAINT CK_col CHECK(a>0 AND b!=0) --撤銷約束 ALTER TABLE table_name DROP CONSTRAINT CK_col
DEFAULT : 設置某列的默認值。一個表中可有多個DEFAULT約束。
--給指定列添加默認定值 name varchar(20) DEFAULT 'Arya' --給指定列添加默認函數值 time date DEFAULT GETDATE() --撤銷約束 DROP DEFAULT name --表創建后添加一個DEFAULT約束 CREATE DEFAULT name AS 'Arya'
不能为如下定义的列创建 DEFAULT 定义:
- timestamp 数据类型。
- IDENTITY 或 ROWGUIDCOL 属性。
- 现有的 DEFAULT 定义或 DEFAULT 对象。
表被創建后可給表添加約束:
ALTER TABLE table_name ADD CONSTRAINT name_bak 【UNIQUE|PRIMARY KEY|FOREIGN KEY】(col_name1,col_name2,……) --CHECK ALTER TABLE table_name ADD CONSTRAINT name_bak CHECK (a>0 AND b!=0 AND……)

浙公网安备 33010602011771号