CREATE语句

--创建一张名称为CUSTOMERS表,ID为主键,NOT NULL表示这些字段在添加记录时,值不能为空
CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID));

--可以通过查看SQL服务器显示的消息来验证表是否已经创建成功,也可以使用以下命令查看
	exec sp_columns CUSTOMERS

DROP语句

--删除表
DROP TABLE table_name;

INSERT语句

--向数据库中的表添加新的数据行
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   
VALUES (value1, value2, value3,...valueN); 

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

--通过SELECT语句将数据填充到表中,而另一个表提供另一个表具有一组字段,这是填充第一个表所必需的
INSERT INTO first_table_name  
   SELECT column1, column2, ...columnN  
      FROM second_table_name 
      [WHERE condition];

SELECT语句

--以结果表的形式返回从数据库中提取的数据
SELECT column1, column2, columnN FROM table_name;

SELECT * FROM table_name;

UPDATE语句

--修改表中的现有记录
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN 
WHERE [condition];

--如果要修改CUSTOMERS表中的所有ADDRESS和SALARY列值,则不需要使用WHERE子句
UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00;

DELETE语句

--DELETE 用于从表中删除现有记录 可以使用AND或OR运算符组合N个条件
DELETE FROM table_name
WHERE [condition];

--删除CUSTOMERS表中的所有记录
DELETE FROM CUSTOMERS;

WHERE子句
用于从单个表获取数据或者使用多个表连接时指定条件
可以使用比较或逻辑运算符(如>,<,=,LIKE,NOT等)指定条件

LIKE子句 模糊查询

--用于使用通配符运算符将值与类似值进行比较。 
--有两个通配符与LIKE运算符结合使用:
--	- 百分号(%)
--	- 下划线(_)

-- XXXX可以是任何数字或字符串值
SELECT *\column-list FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT *\column-list FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT *\column-list FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT *\column-list FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT  *\column-list FROM table_name
WHERE column LIKE '_XXXX_'

--查找以200开头的所有值
WHERE SALARY LIKE'200%'
--查找在任何位置有存在200的所有值
WHERE SALARY LIKE'%200%'
--查找在第二和第三位置中具有00的所有值
WHERE SALARY LIKE'%_00'
--查找以2开头且长度至少为3个字符的所有值
WHERE SALARY LIKE'2 _%_%'
--查找以2结尾的所有值
WHERE SALARY LIKE'%2'
--查找在第二个位置有2,并以3结束的所有值
WHERE SALARY LIKE'%_2 3'
--查找以2开头并以3结尾的五位数字中的任何值
WHERE SALARY LIKE'2___3'

BY子句 排序方式

--根据一个或多个列以升序或降序对数据进行排序。 默认情况下,一些数据库排序查询结果按升序排列
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

--按NAME的降序对结果进行排序
SELECT * FROM CUSTOMERS
ORDER BY NAME DESC

GROUP BY子句 分组查询

--位于SELECT语句中的WHERE子句之后,位于ORDER BY子句之前
SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

--如果我们想知道每个客户的工资总额,那么可以使用以下的GROUP BY查询方式:
SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS
   GROUP BY NAME

DISTINCT子句 去重复

--DISTINCT关键字与SELECT语句一起使用,以消除所有重复记录并仅提取唯一记录。
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]

SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY

JOINS 联表查询 多表查询

  • INNER JOIN -当两个表中都有匹配项时返回行。
  • LEFT JOIN -返回左侧表中的所有行,即使右表中没有匹配项。
  • RIGHT JOIN -返回右表中的所有行,即使左表中没有匹配项。
  • FULL JOIN -在其中一个表中存在匹配项时返回行。
  • SELF JOIN -这用于将表连接到自身,就像该表是两个表,临时重命名MS SQL Server语句中的至少一个表。
  • CARTESIAN JOIN -返回两个或多个联接表中的记录集的笛卡尔乘积。
SELECT ID, NAME, AGE, AMOUNT
   FROM CUSTOMERS, ORDERS
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID
OR

SELECT A.ID, A.NAME, A.AGE, B.AMOUNT
   FROM CUSTOMERS A inner join  ORDERS B on A.ID = B.Customer_ID

子查询 嵌套查询
子查询必须遵循几个规则

  • 子查询语句必须写在括号内。
  • 子查询必须包括SELECT子句和FROM子句。
  • 子查询可以使用WHERE,GROUP BY和HAVING子句。
  • 子查询不能使用COMPUTE或FOR BROWSE子句。
  • 只有在使用了TOP子句时,才能使用ORDER BY子句。
  • 可以嵌套最多32个级别的子查询。
SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

SELECT *
   FROM CUSTOMERS
   WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)


--带有INSERT语句的子查询
--子查询也可以与INSERT语句一起使用。INSERT语句使用从子查询返回的数据插入到另一个表中。可以使用字符,日期或数字函数中的任何一个修改子查询中选定的数据。
INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS
   WHERE ID IN (SELECT ID FROM CUSTOMERS)

--带有UPDATE语句的子查询
--子查询可以与UPDATE语句结合使用。 当使用带有UPDATE语句的子查询时,可以更新表中的单个或多个列。
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )


--使用DELETE语句的子查询
--子查询可以与DELETE语句一起使用,就像上面提到的任何其他语句一样。
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )




--

--