SQL概要及表

SQL概要

1、将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB)
2、常用的是关系数据库(Relational Database,RDB),和 Excel 工作表一样,它也采用由行和列组成的二维表来管理数据,所以简单易懂(表1-1)。同时,它还使用专门的 SQL(StructuredQuery Language,结构化查询语言)对数据进行操作。
3、用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)在这里插入图片描述
4、cmd启动SQL语句

C:\PostgreSQL\9.5\bin\psql.exe –U postgres –d shop

SQL语句及种类

DDL(Data Definition Language,数据定义语言)

用来创建或者删除存储数据用的数据库以及数据库中的表等对象。
CREATE : 创建数据库和表等对象
DROP : 删除数据库和表等对象
ALTER : 修改数据库和表等对象的结构

DML(Data Manipulation Language,数据操纵语言)

用来查询或者变更表中的记录。
SELECT :查询表中的数据
INSERT :向表中插入新数据
UPDATE :更新表中的数据
DELETE :删除表中的数据

DCL(Data Control Language,数据控制语言)

用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。
COMMIT : 确认对数据库中的数据进行的变更
ROLLBACK : 取消对数据库中的数据进行的变更
GRANT : 赋予用户操作权限
REVOKE : 取消用户的操作权限

基本书写规则

1、以分号;结尾
2、关键字不区分大小写
3、字符串和日期常数需要使用单引号(’)括起来。数字常数无需加注单引号(直接书写数字即可)。
4、单词需要用半角空格或者换行来分隔

表的创建

在创建表之前,一定要先创建用来存储表的数据库。
运行CREATE DATABASE 语句就可以在 RDBMS 上创建数据库了。

CREATE DATABASE < 数据库名称 > ;

创建好数据库之后,接下来我们使用 CREATE TABLE 语句在其中创建表。

CREATE TABLE<表名>
(< 列名 1> < 数据类型 > < 该列所需约束 > ,
< 列名 2> < 数据类型 > < 该列所需约束 > ,
< 列名 3> < 数据类型 > < 该列所需约束 > ,
< 列名 4> < 数据类型 > < 该列所需约束 > 
……);

举例:

CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));

命名规则

1、我们只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称
2、在同一个数据库中不能创建两个相同名称的表,在同一个表中也不能创建两个名称相同的列

扫描二维码关注公众号,回复: 8560103 查看本文章

数据类型

1、 INTEGER
用来指定存储整数的列的数据类型(数字型),不能存储小数。
2、 CHAR
CHAR 是 CHARACTER(字符)的缩写,是用来指定存储字符串的列
的数据类型(字符型)。可以像 CHAR(10) 或者 CHAR(200) 这样,在
括号中指定该列可以存储的字符串的长度(最大长度)。字符串超出最大
长度的部分是无法输入到该列中的。
字符串以定长字符串的形式存储在被指定为 CHAR 型的列中。所谓
定长字符串,就是当列中存储的字符串长度达不到最大长度的时候,使用半
角空格进行补足。例如,我们向 CHAR(8) 类型的列中输入 ’ abc ’ 的时候,
会以 abc( abc 后面有 5 个半角空格)的形式保存起来。
3、 VARCHAR
同 CHAR 类型一样, VARCHAR 型也是用来指定存储字符串的列的
数据类型(字符串类型)也可以通过括号内的数字来指定字符串的长度(最
大长度)。但该类型的列是以可变长字符串的形式来保存字符串的,即使字符数未达到最大长度,也不会用半角空格补足
4、 DATE
用来指定存储日期(年月日)的列的数据类型(日期型)

数据约束

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件。
在这里插入图片描述
数据类型的右侧设置了 NOT NULL 约束。 NULL 是代表空白(无
记录)的关键字 。在NULL 之前加上了表示否定的 NOT,就是给该列
设置了不能输入空白,也就是必须输入数据的约束(如果什么都不输入
就会出错)。
另外,在创建 Product 表的 CREATE TABLE 语句的后面,还有
下面这样的记述。

PRIMARY KEY (product_id)

这是用来给 product _ id 列设置主键约束的
所谓键,就是在指定特定数据时使用的列的组合。键种类多样,主键(primary key)就是可以特定一行数据的列。也就是说,如果把product _ id 列指定为主键,就可以通过该列取出特定的商品数据了。
反之,如果向 product _ id 列中输入了重复数据,就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)。这样就可以为某一列设置主键约束了。

表的删除

DROP TABLE < 表名 > ;

需要特别注意的是,删除的表是无法恢复的。即使是被误删的表,也无法恢复,只能重新创建,然后重新插入数据。

表的更新

增加列
有时好不容易把表创建出来之后才发现少了几列,其实这时无需把表删除再重新创建,只需使用变更表定义的 ALTER TABLE 语句就可以了。ALTER 在英语中就是“改变”的意思。

ALTER TABLE < 表名 > ADD COLUMN < 列的定义 > ;

#Oracle和SQL Server中不用写 COLUMN 。
ALTER TABLE < 表名 > ADD < 列名 > ;

#另外,在Oracle中同时添加多列的时候,可以像下面这样使用括号。
ALTER TABLE < 表名 > ADD ( < 列名 > , < 列名 > ,……);

代码清单1-4 添加一列可以存储100位的可变长字符串的 product_name_pinyin 列

#DB2 PostgreSQL MySQL
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
#Oracle
ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));
#SQL Server
ALTER TABLE Product ADD product_name_pinyin VARCHAR(100);

删除列

ALTER TABLE < 表名 > DROP COLUMN < 列名 > ;

#Oracle中不用写 COLUMN 。
ALTER TABLE < 表名 > DROP < 列名 > ;

#另外,在Oracle中同时删除多列的时候,可以像下面这样使用括号来实现。
ALTER TABLE < 表名 > DROP ( < 列名 > , < 列名 > ,……);

表定义变更之后无法恢复。
在执行 ALTER TABLE 语句之前请务必仔细确认。

插入数据

SQL Server PostgreSQL
-- DML :插入数据
BEGIN TRANSACTION; 
INSERT INTO Product VALUES ('0001', 'T 恤衫 ', ' 衣服 ',1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', ' 打孔器 ', ' 办公用品 ',500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', ' 运动 T 恤 ', ' 衣服 ',4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', ' 菜刀 ', ' 厨房用具 ',3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', ' 高压锅 ', ' 厨房用具 ',6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', ' 叉子 ', ' 厨房用具 ',500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', ' 擦菜板 ', ' 厨房用具 ',880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', ' 圆珠笔 ', ' 办公用品 ',100, NULL,'2009-11-11');
COMMIT;

# 特定的SQL DBMS不同,代码清单1-6中的DML语句也略有不同。
在MySQL中运行时,需要把①中的 BEGIN TRANSACTION; 改写成
START TRANSACTION;
在Oracle和DB2中运行时,无需使用①中的 BEGIN TRANSACTION ;(请予以
删除)。

使用插入行的指令语句 INSERT ,就可以把表 1-2 中的数据都插入到表中了。开头的 BEGIN TRANSACTION 语句是开始插入行的指令语句,结尾的 COMMIT 语句是确定插入行的指令语句。

练习题

1、编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项
的表 Addressbook(地址簿),并为 regist _ no(注册编号)列设置
主键约束。
在这里插入图片描述

CREATE TABLE Addressbook
(regist_no		INTEGER		NOT NULL,
name			VARCHAR(128)	NOT NULL,
address			VARCHAR(256)	NOT NULL,
tel_no			CHAR(10)	,
mail_address	CHAR(20)	,
PRIMARY KEY (regist_no));

2、假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请把此列添加到 Addressbook 表中。
列名 : postal_code
数据类型 :定长字符串类型(长度为 8)
约束 :不能为 NULL

ALTER TABLE Addressbook ADD COLUMN postal_code	CHAR(8)	NOT NULL;
答案:
PostgreSQL MySQL
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
Oracle
ALTER TABLE Addressbook ADD (postal_code CHAR(8)) NOT NULL;
SQL Server
ALTER TABLE Addressbook ADD postal_code CHAR(8) NOT NULL;
DB2
无法添加。
在 DB2 中,如果要为添加的列设置 NOT NULL 约束,需要像下面这样指定默认值,或
者删除 NOT NULL 约束,否则就无法添加新列。
DB2 修正版
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL DEFAULT 
'0000-000';

3、编写 SQL 语句来删除 Addressbook 表。

DROP TABLE Addressbook;

4、编写 SQL 语句来恢复删除掉的 Addressbook 表。

删除后的表无法使用命令进行恢复。请使用习题1.1答案中的 CREATE TABLE 语句再
次创建所需的表。
发布了6 篇原创文章 · 获赞 8 · 访问量 1203

猜你喜欢

转载自blog.csdn.net/weixin_43289424/article/details/103883643