SQL语言基础
大家好,我是大黄。这次我来简单带你们了解一下数据库技术中必不可少的一项——SQL语言。
SQL,英文是Structured Query Language,直面翻译就是结构化疑问语言。所以说明这个语言是有一定的结构的,所以基础阶段不会太困难。
SQL数据库体系结构
任何语言都有属于它的一套固定的标准,SQL主要有3个标准:
ANSI(美国国家标准机构)SQL;
对ANSI SQL进行修改后在1992年采用的标准SQL-92或SQL2;
最近的SQL-99标准,也称为SQL3标准。
以上大家了解一下就行,知道现在普遍使用的是SQL3标准就行,为了凑字数,不重要。下面就开始说一些干货!
1.SQL的特点
(1)综合统一。SQL是一种关系型的数据语言。它包含了数据查询、数据定义、数据操纵、数据控制这四个功能。而且有固定的结构,语言风格也统一,可以独立完成数据库生命周记的所有活动。它比非关系型数据语言更简便。而非关系型语句使用起来就相对复杂,修改数据库模式的时候,必须停止现有的数据库运行,转储数据,修改模式编译后再重装数据库。这样一比较,SQL语言的优势就大大体现出来。
(2)高度非过程化。简单来说,用SQL语言进行数据操作的时候,只要指出“做什么”,无须指出“怎么做”,存储路径对于用户来说是透明的,提高了数据的独立性。
(3)面向集合的操作方式。就是操作的对象、查找的结果可以是元组的集合,而不需要一条数据一条数据的操作。
(4)两种使用方式。第一种方式,用户可以在终端键盘上输入SQL命令,对数据库进行操作,称为自含式语言。第二种方式,将SQL语言嵌入到高级语言程序中(比如在一段Java语句中嵌入一段SQL语句),又称为嵌入式语言。
(5)语言简洁、易学易用。SQL语言功能极强,完成和性功能仅仅使用了九个动词。
- 数据查询:select
- 数据定义:create、drop、alter
- 数据操纵:insert、update、delete
- 数据控制:grant、revork
这也是我为什么说不会太困难,掌握了这九个动词的使用方法就基本能实现数据库的所有的数据操作。
2.SQL支持三级模式结构
其中,视图对应外模式、基本表对应模式、存储文件对应内模式。
我们从图中可以看出,“视图”不是数据库必备的,但是一个视图可以同时对应多个表,也就是可以同时对多个表建立一个视图,而且一张表也可以建立多个不同的视图。一张表只能对应一个存储文件,但是一个存储文件可以同时存储多张表。
下面我就来说一下SQL的基本语句。
SQL数据定义
SQL的数据定义包括对表、视图、索引的创建和删除。
1.创建表
语句格式:
create table <表名>(<列名><数据类型>[列级完整性约束条件],
<列名><数据类型>[列级完整性约束条件]······,
<表级完整性约束条件>);
列级完整性约束条件有NULL(空)和UNIQUE(取值唯一),如果NOT NULL UNIQUE表示取值唯一,不能取空值。
【例】在csdn数据库中创建一个用户信息表user(pnum,name,nickname,sex,id_num,birth)分别表示用户手机号、姓名、昵称、性别、身份证号、生日。
CREATE TABLE `user` IN csdn
(
pnum CHAR(11) not null UNIQUE,
name VARCHAR(10)not null,
nickname VARCHAR(10) not null UNIQUE,
sex char(1),
id_num cahr(18) not null,
birth date
);
2.修改和删除表
1)修改表
语句格式:
alter table <表名>[add <列名><数据类型>[列级完整性约束条件]]
[drop <完整性约束>]
[modify <列名><数据类型>];
【例】向用户信息表user增加zap“邮政编码”:
alter table 'user'
add zap char(6);
【例】将性别字段数据类型改为int:
ALTER TABLE `user`
MODIFY sex int;
【例】将邮政编码字段删除
alter TABLE `user`
DROP zap;
SQL数据查询
1.select基本结构
语句格式:
SELECT [ALL | DISTINCT] <目标列表达式>[,<目标列表达式>······]
FROM <表名或者视图名>[,<表名或者视图名>······]
WHERE <条件表达式>
[GROUP BY <列名 1>
[HAVING <条件表达式>]]
[ ORDER BY <列名 2> [ASC | DESC] ]
SQL查询中的子句顺序为SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。
其中SELECT、FROM是必须的,HAVING条件子句只能和GROUP BY搭配起来使用。
WHERE 子句的条件表达式中可以使用的运算符:
2.简单查询
简单查询只需要使用3个保留字,即SELECT、FROM、WHERE
【例】查询用户信息表中的所有信息
select * from 'user';
【例】查询用户信息表中性别为男的手机号码
select pnum from 'user'
where sex='男';
3.连接查询
若查询涉及两个及以上的表,则称为连接查询
新建一个用户订单表order(goods_name,account,price,pnum,address)分别为商品名称、数量、价格、用户手机号、地址。
【例】查询性别为男的用户购买地址
select address from 'order','user'
where 'user'.pnum = 'order'.pnum and sex='男';
4.子查询
1)where子查询:将一个查询结果作为另一个查询(更新)操作的条件
【例】查询性别为男的用户的订单信息
select * from 'order'
where pnum in (
select pnum from 'user'
where sex='男');
2)from子句子查询:将一个查询结果看作一张虚拟表提供给其他查询使用
【例】查询购买了青菜的用户名
select nickname from(
select pnum from 'order'
where goods_name='青菜'
)t,'user'
where t.pnum='user'.pnum;
3)select子句子查询:将一个查询结果和其他查询结果进行组合
【例】查询性别为男的用户名以及他的订单订单地址
select address,(
select nickname from 'user'
where sex='男'
)from 'user','order'
where 'user'.pnum = 'order'.pnum;
5.分组查询
【例】查询各类商品的销售总量并按照销量降序排序
select sum(account)销量,goods_name from 'order'
group by goods_name
order by sum(account) decs;
SQL数据更新
1.插入
如果要在关系型数据库中插入数据,可以指定被插入的元组,或者用查询语句选出一批待插入分元组。
语句格式:
INSERT INTO 基本表名(字段名[,字段名]······)
VALUES(常量[,常量]······);
【例】在用户信息表中插入一条语句
insert into 'user'
values('15131100223','csdn','csdn','男','321282199910010238','1999-10-01');
2.删除
语句格式:
DELETE FROM 基本表名
[WHERE 条件表达式];
【例】删除所有性别为男的用户信息
delete from 'user'
where sex='男';
3.修改
语句格式:
UPDATE 基本表名
SET 列名=值表达式(,列名=值表达式······)
[WHERE 条件表达式];
【例】将所有性别为男的用户的性别改为女
update 'user'
set sex='女'
where sex='男';
好了,关于SQL语言基础就暂时说到这,后续如果还需要什么补充可以给我留言。希望这些对你们有帮助,谢谢!