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 月份

显示汉子版本的月份

    原文作者:SQL
    原文地址: https://blog.csdn.net/u012988966/article/details/36243953
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞