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

时间: 2024-12-25 11:07:36

sql小总结的相关文章

SQL小细节

平时有些小细节,不留意的话很容易得到错误的答案,我们来看下下面的代码,看看你是否能答对呢? DECLARE @str VARCHAR(50) ,@info CHAR(30) SELECT @str = '中国CH',@info='MyTest' SELECT [字符串]= @str,[Len]=len(@str) ,[DataLength]=datalength(@str) SELECT [字符串]= @info ,[Len]=len(@info) ,[DataLength]=datalengt

几个SQL小知识(转)

原文地址:http://www.cnblogs.com/wuguanglei/p/4205976.html 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数 据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了数据库中几个存储过程的一些问题.有意思的是,有一个存储过程里,为了实现一个小的功 能,写了好多好多的代码,又是游标又是循环的,其实用系统的一个默认函数就能解决掉.这里想说的是,学习工作之余,

SQL小技巧小知识

1.[ ]的使用 当我们所要查的表是系统关键字或者表名中含有空格时,需要用[]括起来,例如新建了两个表,分别为user,user info,那么select * from user和select * from user info就要报错,需要写成:select * from [user] 和 select * from [user info],不过千万不要因为有[]的帮助,就随意起名了,那是自找麻烦,不过我确实看到有人把用户表起名为user的. 2.NULLIF函数 NULLIF(Express

推荐几个SQL小知识

写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了数据库中几个存储过程的一些问题.有意思的是,有一个存储过程里,为了实现一个小的功能,写了好多好多的代码,又是游标又是循环的,其实用系统的一个默认函数就能解决掉.这里想说的是,学习工作之余,在没有要解决问题的压力之下,还是建议系统的看看书,对于一些认为没啥用的知识点,也建议去仔细的看看,练练手,说不定

几个SQL小知识

写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了数据库中几个存储过程的一些问题.有意思的是,有一个存储过程里,为了实现一个小的功能,写了好多好多的代码,又是游标又是循环的,其实用系统的一个默认函数就能解决掉.这里想说的是,学习工作之余,在没有要解决问题的压力之下,还是建议系统的看看书,对于一些认为没啥用的知识点,也建议去仔细的看看,练练手,说不定

几个SQL小知识(转)

出处:http://www.cnblogs.com/wuguanglei/p/4205976.html 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了数据库中几个存储过程的一些问题.有意思的是,有一个存储过程里,为了实现一个小的功能,写了好多好多的代码,又是游标又是循环的,其实用系统的一个默认函数就能解决掉.这里想说的是,学习工作之余,在没有要

SQL小知识

1.char/nchar, varchar/nvarchar char(10)只能放五个中文,定长,如果只放一个字节,后面就是就是九个空格(一个中文两个字节) nchar(10)放十个中文,定长 varchar(10)放五个中文,变长,如果只放一个字节, 就只放一个字节 nvarchar(10)放十个中文,变长... 2.创建一个数据库,在数据库里面创建表,以及添加表里的项 create datebase Library go use Library go create table Users

SQL小助手——SQL Prompt

背景: 当数据库设计的比较复杂.庞大时,我们如果对脚本不是很熟悉,就会很难完成看似简单的增.删.改.查的操作.我们需要一款软件来给出相应的提示或帮助,来提高代码的可读性,更快更好的完成任务. 简介: SQL Prompt就是完成这样功能的插件,它是一款拥有SQL智能提示功能的SQL Server和VS插件.SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为用户提供唯一合适的代码选择. 作用: 1)智能提示 提示表名 SQL Prompt会根据用户输入的数据

最近新明白的SQL小知识

1.partition by和order by 先看三个小需求: ①查询出各个类编号的书本的数量. select count (类编号) as 数量, 类编号 from Books group by 类编号 结果如图所示,这个时候用的是group by. ②查询出每一类编号中书的单价和.(例子:类编号为2的书的单价和) select distinct sum (价格) over(partition by 类编号 order by 类编号 ) as 总价格 ,类编号 from Books 结果如图

SQL小抄--整理的一些方便平时参考的技巧--随用随查

SQL 语句 语句 语法 AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND|OR condition ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name AS (alias for