sql小总结

1 左连接又称内部连接 前提:两个表格内都有同样的值。

2 有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种数据库都有提供方法来
达到这个目的:
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
CONCAT() 的语法如下:
例子1:
MySQL/Oracle:
SELECT CONCAT(region_name,store_name) FROM Geography
WHERE store_name = ‘Boston‘;
结果:‘EastBoston‘
例子2:
Oracle:
SELECT region_name || ‘ ‘ || store_name FROM Geography
WHERE store_name = ‘Boston‘;
结果:‘East Boston‘
例子3:
SQL Server:
SELECT region_name + ‘ ‘ + store_name FROM Geography
WHERE store_name = ‘Boston‘;
结果:‘East Boston‘

3 SUBSTRING
SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同
的数据库中不完全一样:
MySQL: SUBSTR(), SUBSTRING()
Oracle: SUBSTR()
SQL Server: SUBSTRING()
SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字符。请注意,这个语法不适
用于SQL Server 上。
SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字符。
SELECT SUBSTR(store_name, 3)
FROM Geography
WHERE store_name = ‘Los Angeles‘;
结果:‘s Angeles‘
例2:
SELECT SUBSTR(store_name,2,4)
FROM Geography
WHERE store_name = ‘San Diego‘;
结果:‘an D‘

4 TRIM
SQL 中的 TRIM 函数是用来移除掉一个字符串中的字头或字尾。最常见的用途是移除字首
或字尾的空白.
TRIM([[位置] [要移除的字符串] FROM ] 字符串): [位置] 的可能值为 LEADING (起头),
TRAILING (结尾), or BOTH (起头及结尾)。 这个函数将把 [要移除的字符串] 从字符串的起
头、结尾,或是起头及结尾移除。如果我们没有列出 [要移除的字符串] 是什么的话,那空
白就会被移除。column row
create table test(Name char(20),Address char(50),City char(30),Phone char(11))

alter table test add Id char(2)
not null, unique, check,primary key ,foreign key

5 UNIQUE 限制是保证一个栏位中的所有资料都是有不一样的值。
例:
CREATE TABLE Customer
(SID integer Unique,
Last_Name varchar (30),
First_Name varchar(30));
"SID" 栏位不能有重复值存在,而 "Last_Name" 及 "First_Name" 这两个栏位则是允许有重
复值存在。
请注意,一个被指定为主键的栏位也一定会含有 UNIQUE 的特性。相对来说,一个
UNIQUE 的栏位并不一定会是一个主键。

6 CHECK 限制是保证一个栏位中的所有资料都是符合某些条件。
例:
CREATE TABLE Customer
(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));
"SID" 拦只能包含大于 0 的整数。
请注意,CHECK 限制目前尚未被执行于 MySQL 数据库上。
主键 and 外来键 将于下两页中讨论。

7 主键
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));

以下则是以改变现有表格架构来设定主键的方式:
MySQL:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
Oracle:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
SQL Server:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
请注意,在用ALTER TABLE 语句来添加主键之前,我们需要确认被用来当做主键的栏位是
设定为 『NOT NULL』 ;也就是说,那个栏位一定不能没有资料。

8 外键
表A 表B a是表A中的主键,a在表B中是外键。B中的数据不能没有不在A中的数据。
以下列出几个在建置 ORDERS 表格时指定外来键的方式:
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));
Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);
SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);
以下的例子则是藉着改变表格架构来指定外来键。这里假设 ORDERS 表格已经被建置,而
外来键尚未被指定:
MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);
Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES
CUSTOMER(sid);
SQL Server:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

9 视图(新学点)
视观表 (Views) 可以被当作是虚拟表格。它跟表格的不同是,表格中有实际储存资料,而
视观表是建立在表格之上的一个架构,它本身并不实际储存资料。
建立一个视观表的语法如下:
CREATE VIEW "VIEW_NAME" AS "SQL 语句"
"SQL 语句" 可以是任何一个我们在这个教材中有提到的 SQL。
create view v_test as select * from test

10 清除表中数据 truncate table (新学的)
TRUNCATE TABLE 的语法为下:
TRUNCATE TABLE "表格名"

11 union
UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
结果:Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

12 union all
UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales
结果:Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-08-1999
Jan-07-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

13 intersect
INTERSECT 的语法如下:
[SQL 语句 1]
INTERSECT
[SQL 语句 2]
SELECT Date FROM Store_Information
INTERSECT
SELECT Date FROM Internet_Sales
结果:Date
Jan-07-1999
UNION 是联集,而 INTERSECT 是交集。
请注意,在 INTERSECT 指令下,不同的值只会被列出一次。

14 minus
MINUS 的语法如下:
[SQL 语句 1]
MINUS
[SQL 语句 2]
SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales
结果:Date
Jan-05-1999
Jan-08-1999

15 Exists
基本上, EXISTS 是用来测试内查询有没有产生任何结果。如果有的话,系统就会执行外
查询中的 SQL。若是没有的话,那整个 SQL 语句就不会产生任何结果。
SELECT "栏位1"
FROM "表格1"
WHERE EXISTS
(SELECT *
FROM "表格2"
WHERE [条件])

16 Case
CASE 是 SQL 用来做为 if-then-else 之类逻辑的关键字。 CASE 的语法如下:
SELECT CASE ("栏位名")
WHEN "条件1" THEN "结果1"
WHEN "条件2" THEN "结果2"
...
[ELSE "结果N"]
END
FROM "表格名"
"条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。


select a1.Rid ,a1.Rname,count(a2.Rname)AS‘排序‘
from Result a1,Result a2
where a1.Rname<=a2.Rname or(a1.Rid=a2.Rid and a1.Rname=a2.Rname)
group by a1.Rid,a1.Rname
order by a1.Rname DESC,a1.Rid DESC

17 alter table ---------修改表结构
用法: alter table 表名
alter column 列名 类型 ---------修改列的类型
drop column 列名 --------删除列
add (column) 列名 --------增加列,实际用时不加 column

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。