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 月份
显示汉子版本的月份