SQL 高級

Persons 表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing


一.TOP :用於要規定要返回的記錄的數目

select top 5 * from student (返回student表前5條記錄信息)

slelect top 50 percent *from student (返回student表前50%的記錄信息)

二.LIKE:操作符用於在 WHERE 子句中搜索列中的指定模式

用法: select *(列名) from persons(表名) where city(列名) like '%g' 找出結尾包含g

用法 select *(列名) from persons(表明) where city(列名) not like '%g' 找出結尾不包含g

%  定義通配符(代替缺少的字符)

對於'%'有三種用法

1.'like%'  代表所有以like開頭的字符串

2.'%like%' 代表所有包含like的字符串

3.'%like' 代表末端以like結尾的字符串

三.通配符

1.% 替代1一個或多個字符

2. _ 僅僅替代一個字符

3. [charlist]  字符列中一個字符  

4.[!charlist] 不再字符列中的一個字符

四. IN操作符

IN 操作符允許我們在 WHERE 子句中規定多個值

用法:select * from person where LastName(列名) in ('Adams','Bush') LastName列中尋找含有Adams 和 Bush 姓氏

五.SQL BETWEEN 操作符

操作符 BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。

用法 select * from person where Id between 1 and 3     Id列中尋找介於1-3的行

用法 select * from person where Id not between 1 and 3 Id尋找除1-3之外的行

注意在SQL server中 between value1 and value2 會把value1 和 value2 讀取出來

六.SQL Alias(別名)

通過使用 SQL,可以爲列名稱和表名稱指定別名(Alias)。

表的用法 select p.LastName from person as p;  將表person添加別名p

列的用法 select LastName as 姓氏 from person; 將表person的LastName添加別名爲姓氏

七.SQL JOIN

INNER JOIN (INNER JOIN 與JOIN的意思相同)

用法:select *(列名) from table1(表名) inner join table2(表名) on table1.Id = table2.Id  (聯繫table1與table2兩個表)

八.SQL LEFT JOIN

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回所有的行,即使在右表 (table_name2) 中沒有匹配的行

用法:select *(列名)  from table1(表名) left join table2(表名) on table1.Id = table2.Id (聯繫table1與table2兩個表)

即左邊與右邊沒有匹配,也會返回左邊的所有行

九.SQL RIGHT JOIN

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。

用法: select *(列名) from table1(表名) right join table2(表名) on table1.Id = table2.Id(跟上面left join 相反)

十.SQL FULL JOIN

只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。

用法: select * from table1 full join table2 on table1.Id = table2.Id

十一.SQL UNION

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

用法:select Id,name from table1 union select Id,name from table2(不返回相同)

用法:select Id,name from table1 union all select Id,name from table2(返回相同);

十二.SQL SELECT INTO 可用於創建表的備份文件

用法:select * into table2 from table1  把table1的文件拷貝到table2中 

十三.SQL CREATE DATABASE 創建數據庫

創建一個名爲"sql"的數據庫

create database sql

十四 SQL CREATE TABLE 創建表

創建一個表爲名爲'table2'

create table table2

(

列表名1 數據類型

列表名2 數據類型

.......

)

十五.UNIQUE約束

每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

用法:

CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,/*約束*/
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如果需要命名約束,以及爲多個列定義 UNIQUE 約束,請使用下面的 SQL 語法:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
uc_personID 爲約束名

以上是前提是persons表不存在

如果當前表已經存在,用下面的語句:

創建約束:

<pre code_snippet_id="432839" snippet_file_name="blog_20140722_3_2065571" name="code" class="sql">ALTER TABLE Persons
ADD UNIQUE (Id_P)//創建單個約束
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)//創建多個約束



撤銷約束:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID


十六.PRIMARY KEY

PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應該有一個主鍵,並且每個表只能有一個主鍵。

下面是不存在表person表的語法

create table person
(
id int not null (primary key),
city nchar(10) not null,
primary key(id)
(constraint pk_preson primary key(id))
)

當存在person表時

alter table person add constraint pk_person primary key(id,city)//(複合主鍵)添加主鍵
alter table person drop pk_person//撤銷主鍵

十七.FOREIGN KEY

一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。

壞表之間連接的動作。FOREIGN KEY 約束也能防止非法數據插入外鍵列,因爲它必須是它指向的那個表中的值之一。在新建表時:

create table person
(
id int not null,
lastname nchar(10) not null,
primary key (id)
)
create table person1
(
id int not null,
lastname nchar(10),
id_f int foreign key references person(id)(或者constraint fk_person1 foreign key(f_id) references person(id))
)
在表存在時:

alter table person1 add constraint fk_person1 foreign key (f_id) references person(id)//添加外鍵
alter table person1 drop constraint fk_person1//撤銷外鍵
十八.CHECK

OREIGN KEY 約束用於預防破CHECK 約束用於限制列中的值的範圍。
如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。
如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

新建表時

create table person
(
id int not null primary key check(id > 0),
lastname nchar(10) not null,
(或者 constraint c_person check(id>0 and lastname ='moumou'))
)
表存在時

alter table person add constraint c_person check(id > 0 and lastname = 'moumou')//添加
alter table person drop constraint c_person//撤銷

十八.SQL DEFAULT 約束

DEFAULT 約束用於向列中插入默認值。
如果沒有規定其他的值,那麼會將默認值添加到所有的新記錄。

十九.SQL  CREATE INDEX

在不讀取整個表的情況下,索引使數據庫應用程序可以更快地查找數據。

您可以在表中創建索引,以便更加快速高效地查詢數據。
用戶無法看到索引,它們只能被用來加速搜索/查詢。

CREATE INDEX index_name
ON table_name (column_name)//創建簡單的索引CREATE UNIQUE INDEX index_name
ON table_name (column_name)//創建uniue索引,不包括兩個行相同值CREATE UNIQUE INDEX index_name
ON table_name (column_name DESC)//以降序索引


二十.SQL 撤銷索引、表以及數據庫

DROP INDEX tabel_name.index_name//撤銷索引
DROP TABLE table_name//撤銷表
DROP DATABASE db_name//撤銷數據庫<pre name="code" class="sql">TRUNCATE TABLE tabel_name//刪除表數據,是屬於整個表刪除,而delete * from table_name 是逐行刪除


二十一.SQL ALTER 

ALTER TABLE 語句用於在已有的表中添加、修改或刪除列。

<pre name="code" class="sql">ALTER TABLE table_name ADD column_name datatype//在已有表中添加column_name 列
ALTER TABLE table_name DROP COLUMN column_name//在已有表中刪除column_name列
ALTER TABLE table_name ALTER COLUMN column_name datatype//在已有表中更改列column_name的類型


二十二.SQL IDENTITY

Auto-increment 會在新記錄插入表中時生成一個唯一的數字。(相當於標識)

create table person
(
id int not null primary key identity(1,1),(或者是identity)默認就是從1開始,增值爲1
lastname nchar(10) not null,
)
二十三.SQL VIEW(視圖)

視圖包含行和列,就像一個真實的表。
視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。
我們可以向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,我們也可以提交數據,就像這些來自於某個單一的表。

視圖就是結果集,取了一個別名來代替長長的SQL語句,每次訪問時不用敲那麼長的SQL語句

create view v_name as
select id from person //視圖創建
select * from v_name //訪問視圖
alter view v_name as
select id,lastname from person //向v_name視圖中加入列lastname也就是更新視圖
drop view v_name //撤銷視圖

二十四.SQL EXISTS

EXISTS受限制的 SELECT 語句。 不允許使用 INTO 關鍵字

返回

如果子查詢包含任何行,則返回 TRUE



select * from person where exists(select * from person where person.lastname = 'Adams') -- exists返回布爾值

結果集:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

not EXISTS

與EXISTS相反

select * from person where not exists(select * from person where person.lastname = 'Adams' ) --exists返回值相反

結果集:


Id LastName FirstName Address City

二十五.CASE WHEN

CASE WHEN相當於C語言中switch case

語法:

 select   getdate()   as   日期,CASE month(getdate())   
 WHEN 11 THEN '十一'   
 WHEN 12 THEN '十二'   
 ELSE   substring('一二三四五六七八九十',month(getdate()),1)   
 END +'月' as 月份
顯示漢子版本的月份

發佈了53 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章