SQL 命令整理

--DDL语句(数据定义语言--Data definition language)
--创建库脚本
CREATE DATABASE SQLTips
ON
(
NAME = SQLTips_data,--文件名
FILENAME = 'D:\Data\SQLTips_data.mdf',--文件物理路径
SIZE = 10,--文件大小
FILEGROWTH = 10MB--文件增长大小
)
LOG ON
(
NAME = SQLTips_log,
FILENAME = 'D:\Data\SQLTips_log.ldf',
SIZE = 5,
FILEGROWTH = 5MB
)
--创建表脚本
CREATE TABLE item_master
(
item_number integer identity primary key,--自动增长
[description]  varchar(35) not null
)
CREATE TABLE orders
(
order_number integer unique identity not null,
item_number  integer not null,
quantity smallint default 1,--默认值
item_cost decimal(5,2),
customer_number integer
primary key(order_number,item_number)--主键
foreign key(item_number) references item_master--外键
)
CREATE TABLE #TEMP_TABLE_SINGLE_USER--创建临时表,该表仅表创建人是可访问的,当用户注销时DBMS系统将自动删除该表
CREATE TABLE ##TEMP_TABLE_ALL_USER--创建多个用户和会话可以访问的临时表,DBMS将在最后引用该表的用户注销时删除全局临时表
--设置默认值及使用存储过程sp_bindefault将默认值绑定
CREATE DEFAULT ud_value_unknown as 'Unknown'
EXEC sp_bindefault
@defname=ud_value_unknown,
@objname='users.address'
--ALTER TABLE 语句
ALTER TABLE users ADD newcolum INTEGER --修改表添加新列
ALTER TABLE users DROP COLUMN newcolum --修改表删除列
ALTER TABLE users
ALTER COLUMN email varchar(100) --修改表修改列数据类型
ALTER TABLE users   --修改表主键,需先删除主键列
ADD CONSTRAINT pk_users PRIMARY KEY ([user_id])
ALTER TABLE users   --修改表删除主键
DROP CONSTRAINT pk_users
ALTER TABLE users   --修改表外键引用(添加新外键引用的列需是其它表的主键)
ADD CONSTRAINT fk_users_column
FOREIGN KEY (<列名>) REFERENCES (<表名>)
exec sp_help users --系统帮助
--设置主键(两种方式)
CREATE TABLE Simple
(
Simple_id int primary key,
Simple_name varchar(50)
)
CREATE TABLE Simple
(
Simple_id int,
Simple_name varchar(50)
constraint pk_Simple_id
  primary key(Simple_id,Simple_name)
)
--设置外键(两种方式,语法同上)
CREATE TABLE Simple_II
(
Simple_II_id INT PRIMARY KEY,
Simple_id INT
CONSTRAINT fk_simple_ii FOREIGN KEY (Simple_id) REFERENCES Simple(Simple_id)
--constraint为外键指定名称
)
--另外若主键表的主键为两列或以上,相应的引用外键也需指定为两列或以上
--视图:创建视图语法基本同其它创建语法(create view <vw_name> as ...).对于视图命名最好保持一致性,如以"vw_"开头
--删除视图(drop view <vw_name>)




--DML(数据操纵语言--Data manipulate language)--INSERT INTO
INSERT INTO Users(username,password,first_name,last_name,sex,email,regionid,age,address,postcode,mobile,regdate)
VALUES(@username,@password,@first_name,@last_name,@sex,@email,@regionid,@age,@address,@postcode,@mobile,@regdate)
--注:使用INSERT语句添加新行尽量使用事务机制避免出错
--其中并非所有列都需填写..并且可以一次填入多组values,例
INSERT INTO Users(username,password,first_name,last_name,sex,email,regionid,age,address,postcode,mobile,regdate)
VALUES
(@username,@password,@first_name,@last_name,@sex,@email,@regionid,@age,@address,@postcode,@mobile,@regdate)
(@username1,@password1,@first_name1,@last_name1,@sex1,@email1,@regionid1,@age1,@address1,@postcode1,@mobile1,@regdate1)
(@username2,@password2,@first_name2,@last_name2,@sex2,@email2,@regionid2,@age2,@address2,@postcode2,@mobile2,@regdate2)
(@username3,@password3,@first_name3,@last_name3,@sex3,@email3,@regionid3,@age3,@address3,@postcode3,@mobile3,@regdate3)
--用insert语句从一个表向另外一个表复制,我们假设users1表是结构与users完全相同的一张表
INSERT INTO Users1 SELECT * FROM Users

--UPDATE
--使用UPDATE语句改变列值
--语法如下:UPDATE <table name|view name> SET <column name> = <expression> [...,<last column name> = <last expression>] [WHERE <search condition>]
UPDATE Users SET first_name = 'new first_name',last_name = 'new last_name' where username = 'user1'
--在UPDATE语句中使用子查询同时改变多行中的值
UPDATE Users SET address = '北京市区' WHERE regionid <= (SELECT regionid FROM Region WHERE RegionName = '北京市')
--使用UPDATE语句根据另一表中的值改变表的值
UPDATE Users SET address = '北京市区' WHERE regionid IN (SELECT regionid FROM Region WHERE RegionName = '北京市')
--DELETE
--使用DELETE语句从表中删除行
--语法如下:DELETE FROM <table name> [WHERE <search condition>]
DELETE FROM Users WHERE username = 'user1'--注:使用UPDATE更新行尽量使用事务机制避免更新错误
--DELETE语句一次从表中删除一行,如果使用如下语句DELETE FROM Users,DBMS将一次一行进行删除,此时可以使用
TRUNCATE TABLE Users --DBMS同时删除信息页,将同时删除多个数据行.但TRUNCATE TABLE 语句并不更新事务日志,
--因此使用TRUNCATE TABLE 删除行,则将不能使用ROLLBACK 语句回滚删除操作,即使作为事务处理执行
--TRUNCATE TABLE 语句也是如此
--因insert,delete语句将改变表中的数据,使用上述语句时将其作为事务处理来执行是必要的

--SELECT
--语法结构:
--SELECT [ALL|DISTINCT] <select item list> //ALL,全部;DISTINCT,去掉重复行
--FROM <table list>    
--[WHERE <search conditions>]   //可选条件语句
--[GROUP BY <grouping column list>]  
--[HAVING <having search conditions>]
--[ORDER BY <sort specification>]  //可选排序条件
SELECT * FROM Users WHERE username = 'user1'
--使用SELECT从多个表中返回值
SELECT Users.username,Users.first_name,Users.last_name,Region.Regionid,Region.RegionName
FROM Users JOIN Region ON Users.Regionid = Region.Regionid WHERE Users.username = 'user1'
--WHERE子句中可使用复合条件(AND,OR,NOT)
--子查询:SELECT语句内的一条SELECT语句,子查询大多数情况下返回单值;子查询可以由IN或NOT IN 引入
--则子查询必须返回一列的结果表,但结果可以有不止一行;不能有ORDER BY子句
--CASE WHEN THEN
SELECT [user_id],username,CASE sex
    WHEN 0 THEN '男'
    WHEN 1 THEN '女'
     END AS Sex
FROM Users
--可以使用CASE表达式更新列值
--NULLIF,ISNULL表达式
--NULLIF是ISNULL的反函数;ISNULL函数用非NULL值来代替NULL,NULLIF用NULL值来代替非NULL值
NULLIF(<expression 1>,<expression 2>)
--使用COALESCE表达式代替NULL值

原文地址:https://www.cnblogs.com/sshh/p/1368911.html