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 月份
顯示漢子版本的月份