基础的SQL笔记


建立数据库:     
Create database<数据库名>
如:create database 教学

创建表:
Create table<表名>(<列名1><数据类型>,<列名2><数据类型>,…,<列名n><数据类型>,primary key(<主码>),foreign key(〈外码〉)references 表名(<外码>))
如:create table 成绩
(学号 char(6) not null,课程编号 char(8) not null,分数numeric(8,2),primary key(学号,课程编号),foreign key(学号) references 学生(学号),foreign key(课程编号) references 课程(课程编号))
注——常见的数据类型:


修改表结构(添加属性):
Alter table<表名>add<新属性名><域类型>
如:Alter table 系 add 电话号码 char(8)

修改属性的性质:
Alter table <表名> alter column <属性名><新的域类型>
如:Alter table 系alter column 电话号码 char(13)

删除一个属性:
Alter table <表名> drop  column <属性名>
如:Alter table 系drop column 电话号码

删除表
Drop table <表名>
如:Drop table 教工

创建索引
Create<unique> index <索引号>on <表名>(<索引关键字>)
如:create unique index scodex on 教工(教工号)

插入数据(三种情况)
(1)insert into <表名> values (<值1>,<值2>,…,< 值n>)
如:Insert  into 系values(102,’管理科学’)
(2)insert into <表名>(<列名表>) values (<值列表>)
如:Insert  into 系(系编号,系名)values(102,’管理科学’)
(3)insert into <表名>(<列名表>)select<列名表>form<表名>
如:insert into 酬金(教工姓名,工资)select 姓名,工资from教工

更新数据
      Update<表名>set <列名1>=<新值1>,<列名2>=<新值2>,…,< 列名n>=<新值n>where<条件表达式>
         如: update 教工  set工资=工资*1.1  where 职称=’教授’

删除数据
      Delete from <表名>where<条件表达式>
  如:delete from 教工 where 教工号=’2001’(没有指明where删除所有数据)

查询操作
Select<*/distinct(消除重复)/as(对输出的重命名,可包含表达式)>
From <表名1>,<表名2>,…,<表名m>
Where<条件表达式>
如:select 课程名,学时/17 as学分 from 课程
               Select R.姓名,R.工资
               From 教工 R,教工 S
               Where R.工资<S.工资 and S.姓名=’江滔’

字符串操作
%    ‘表示任意子字符串
_     ‘表示任何一个字符

字符串操作符like
如:select 姓名
from 教工
where 姓名like ‘王_平’

几个特殊的运算符
       <not>between and

排列显示顺序
Select <列名1>,<列名2>,…,< 列名n>
From <表名1>,<表名2>,…,<表名m>
Where<条件表达式>
order by <列表名>[desc][asc]

集合查询
(select a,b,c from R) union <all 保留重复> (select a,b,c from S)  ‘并操作
(select a,b,c from R) intersect <all 保留重复> (select a,b,c from S)  ‘交操作
(select a,b,c from R) except <all 保留重复> (select a,b,c from S)  ‘差操作

集聚函数
Select <avg(平均值) / sum(总和) / max(最大值) / min(最小值) / count<* / distinct (记数<所有行 / 唯一且非空)>
如:select count(distinct (学号)) as 人数 from 成绩
Group by 和 having
格式:Select <列名1>,<列名2>,…,< 列名n>
From <表名1>,<表名2>,…,<表名m>
Where<条件表达式>
          [group by <分组表达式>]
          [having <筛选条件表达式>]
如:select 性别,count(*)
               From 学生
               Group by 性别
        如:select 学号,count(课程编号),avg(分数)  
               From 成绩
               Where 分数>=60
               Group by 学号
               Having count(课程编号)>2 and avg(分数)>70  ‘分组后再筛选

空值(is null 和is not null)集聚函数(sum avg min max忽略null)
如:select 帐号,姓名
              From 贷款
              Where 金额is null   ‘找出表中金额为空的帐号和姓名

嵌套查询
select  A.学号
from 成绩 A
where A.课程号=’C1’ and A.分数>=
(select avg(B.分数)
from 成绩 B
where B.课程号=’C1’)

(1)  不相关子查询
where <表达式e>[not] in(R)
如:select 学号 姓名
from 学生
where 学号 <not> in
      (select 学号
       From 成绩
       Where 课程编号=
             (select 课程编号
              From 课程
              Where 课程名称=’计算机’))

(2)  相关子查询(子查询需要根据外查询提供的数据运行)
Where [not] exists (R)
  如:select 姓名
     From 学生A
     Where 90<=
            (select 分数
             From 成绩B
             Where A.学号=B.学号and B.课程编号=’c2’)

ANY、ALL、SOME量词
select 姓名
     From 学生A
     Where 工资>any / all / some
            (select 分数
             From 成绩B
             Where A.学号=B.学号and B.课程编号=’c2’)

视图(视图是一个虚表,他的数据来自一个或多个基本表,或者来自其他的视图)
格式:
创建视图

create view <视图名> as〈查询语句〉

删除视图
     Drop view <视图名>


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 519
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 20 字 | UBB代码 关闭 | [img]标签 关闭