SQL学习
创建数据库:
CREATA DATABASE <数据库名>
删除数据库:
DROP DATABASE <数据库名>
SQL基本数据类型
(1)数值型
INTEGER 长整型
SMALLINT 短整型
REAL 浮点型
DOUBLE PRECISION 双精度浮点数
FLOAT (n) 浮点数,精确到小数点后n位
NUMERIC(p,d) 定点数,有p位数,小数点后面有d位数
(2)字符串型
CHAR(n) 长度为n的定长字符串
VARCHAR(n) 具有最大长度为n的变长字符串
(3)位串型
BIT(n) 长度为n的二进制位串
BIT VARYING(n) 最大长度为n的二进制位串
(4)时间型
DATE 日期型,年月日
TIME 时间型,时分秒
注:不同的数据库要比以上的数据类型丰富。
http://www.w3school.com.cn/sql/sql_datatypes.asp
创建数表:
对基本表结构的操作有 创建、修改和删除
1、基本表的创建
语法:
CREATE TABLE <基本表名>
(<列名 类型>,
........
<完整性约束>,
........ )
例:
CREATE TABLE biao
(id# CHAR(4) NOT NULL,
name CHAR(8) NOT NULL,
title CHAR(10),
PRIMARY KEY(id#)
FOREIGN KEY(name#) REFERENCES biao2(name#));
biao 为表名,
id# 为字段名,CHAR(4)字段类型与长度,NOT NULL表示字段不能为空;
PRIMARY KEY(id#) 表示id#字段为主键。
FOREIGN KEY(name#) REFERENCES biao2(name#) 表示外键name# 与biao2的name#对应。
2、基本表的修改
在基本本建立一段时间后,可以根据实际需要对基本表进行修改。
(1)增加新的列用“ALTER.....ADD.....”语句,句法如下:
ALTER TABLE<基本表名> ADD<列名><类型>
例:在一个表S中增加一个地址(address)列,可用下列语句:
ALTER TALBLE S ADD address varchar (30);
(2)删除原有列用“ALTER ...DROP....”语句,其句法如下:
ALTER TABLE<基本表名>DROP<列名>[CASCADE | RESTRICT]
例:在基本表S中删除年龄(age)列
ALTER TABLE S DROP age CASCADE;
(3)修改原有列的类型、宽度用“ALTER ....MODIFY.....”,句法如下:
ALTER TABLE<基本表名> MODIFY <列名><类型>
例:在基本表S 中NAME 的长度为6
ALTER TABLE S MODIFY name char(6);
3、基本表的删除
在基本表不需要时,可以用“DROP TABLE” 语句删除。句法:
DROP TABLE <基本表名> [CASCADE | RESTRICT]
例:需要删除S 表
DROP TABLE S RESTRICT;
创建索引
1、索引的创建
创建索引用“CREATE INDEX”语句实现。
CHARTE [UNIQUE] INDEX <索引名> NO <基本表名>(<列表序列>)
例:对S表创建索引。
CHARTE UNIQUE INDEX id_index NO S(id)
UNIQUE表示每个索引值对应唯一的数据记录。
2、索引的删除
删除索引用“DROP INDEX”,语法下:
DROP INDEX<索引名>
例:
DROP INDEX id_index,sc_index;
查询语句
查询SQL 语言的主要功能。相比其它操作的用法也比较复杂。
1、聚合函数
SQL提供了下聚合函数:
COUT(*) 计算元组的个数
COUNT(<列名>) 对一列中的值计算个数
SUM(<列名>) 求某一列值的总和
AVG(<列名>) 求某一列值的平均值
MAX(<列名>) 求某一列值的最大值
MIN(<列名>) 求某一列值的最小值
例:求S表,学生的总人数和平均年龄。
SELECT COUNT(*),AVG(AGE)
FROM S
2、字符串的匹配符
百分号(%):匹配零个或多个字符
下划线(_): 匹配单个字符
例:查询姓“张”的人
SELECT * FROM S WHERE name=“张%”
3、SELECT语句句法:
SELECT<目标表名和(或)视图序列>
FROM<基本表名和(或)视图序列>
[WHERE<行条件表达式>]
[GROUP BY<列名序列>
[HAVING<组条件表达式>]]
[ORDER BY <列名[ASC | DESC]>,....]
(1)SELECT .... FROM .....WHERE .....;最基本的查询格式。
(2)GROUP 子句中指定列的值分组,提取满足HAVING子句中组条件表达式的组。
(3)ORDER子句对输出的目标表进行排序,ASC升序排列(默认可以不写),DESC降序排列。
例1:Orders表,查找每个客户的总金额(总订单)。
我们想要使用 GROUP BY 语句对客户进行组合。
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
GROUP BY 详细用法:
http://www.w3school.com.cn/sql/sql_groupby.asp
例2:Orders表,查找订单总金额少于 2000 的客户。
用HAVING 筛选分组条件,我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
例3:Orders表,对定单对进行降序。
SELECT Customer,OrderPrice FROM Orders
ORDER BY OrderPrice DESC
数据更新
1、数据插入
(1)单元组的插入
INSERT INTO <基本表名>[(<列名序列>)]
VALUES(<元组值>)
(2)多元组的插入
INSERT INTO <基本表名>[(<列名序列>)]
VALUES(<元组值>),(<元组值>),...........,(<元组值>)
(3)查询结果的插入
INSERT INTO <基本表名>[(<列名序列>)]
<SELECT查询语句>
(4)表的插入
INSERT INTO <基本表名1>[(<列名序列>)]
TABLE<基本表名2>
这个语句把基本表2的值插入到基本表1中。
例1:
INSERT INTO S(id,name)
VALUES(‘001’,‘张三’);
例2:
INSERT INTO S(ID,NAME)
VALUES(‘001’,‘张三’),
(‘002’,‘李四’)
(‘003’,‘王五’);
例3:在基本表S中,把成绩大于80分的学生的学号和平均成绩存入另一个已存在的基本表S2(ID,SCORE)。
INSERT INTO S2(id,score)
SELECT id,score
FROM S WHERE score > 80 ;
例4:某个班级的选课情况已经在基本表S(ID,NAME,SEX),把S的数据插入到表S2中。
INSERT INTO S2(id,name,sex)
TABLE S;
2、数据删除
SQL的删除操作是指从基本表中删除行,其句法如下:
DELETE FROM<基本表名>
[WHERE<条件表达式>]
例:把课程名为maths的成绩从基本表S中删除
DELETE FROM S
WHERE cname=‘maths’;
3、数据修改
修改表中元组的某些值时,可以用UPDATA 语句实现。句法如下:
UPDATE<基本表名>
SET<列名> <值表达式>[,<列名>=<值表达式>] | ROW (<元组>)
[WHERE<条件表达式>]
例1:对基本表S,把C5课程名改为DB
UPDATA S
SET CNAME=‘DB’
WHERE class_id=‘C5’;
例2,在S表中,把课程号为C5的元组修改为(C5,DB,T3)
UPDATE S
SET ROW=(‘C5’,‘DB’,‘T3’)
WHERE class_id=‘C5’
创建视图的
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
1、视图的创建
创建试图用“CREATE VIEW”语句实现。句法如下:
CREATE VIEW <视图名>(<列表序列>)
<SELECT 查询语句>
例:对数据库中表S,SC,C,用户经常用到的sname,cname,score等列的数据,创建视图。
CREATE VIEW STUDENT_SCORE(sname,cname,score)
FROM S,SC,C
WHERE S.id = SC.id AND SC.id = C.id ;
2、视图的删除
不需要视图时,用“DROP VIEW” 删除,句法:
DROP VIEW <视图名>
例:
DROP VIEW STUDENT_SCORE;
3、操作视图
试图的查询(SELECT)操作与表基本一样。但对于视图中元组的更新操作就不一样了。
如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”。允许用户更新的试图在定义时必须加上“WITH CHECK OPTION”。
例:定义一个有关男学生的视图:
CREATE VIEW S_MALE
AS SELECT id,sname,age
FROM S
WHERE sex=”M”
WITH CHECK OPTION;
本文为转载学习http://www.cnblogs.com/fnng/archive/2013/09/28/3344494.html,感谢虫师的笔记