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……)
posted @ 2013-09-27 17:19  darkor2  Views(177)  Comments(0)    收藏  举报