数据和表
数据库:保存表和其他相关SQL结果的容器
流程图中,数据库都是以圆柱体表示
列是存储在表中的一块数据。行是一组能够描述某个事物的流的集合。行和列构成了表
数据库中所有的表应该能以某种方式相互关联
创建数据库
CREATE DATABASE gregs_list;
使用刚才的数据库
USE gregs_list;创建一个表
CREATE TABLE doughnut_list
(
doughnut_name VARCHAR(10),
doughnut_type VARCHAR(6)
);- CRATE TABLE 创建表
- 括号里输入表第一列和第二列名称
- VARCHAR:保存以文本格式存储的信息
- (6):表示这段文字的长度最多只有6个字符
各种数据类型
- CHAR / CHARACTER
- INT / INTEGER
- DEC, DECIMAL
- BLOB
- DATE
- TIMESTAMP / DATETIME
- VARCHAR
《SQL技术手册》
查看创建的表
DESC my_contacts;删除创建的表
DROP TABLE my_contacts;添加数据:INSERT
INSERT INTO doughnut_purchases
(donut_type, dozens, topping, price)
VALUES
('jelly', 3, 'sprinkless', 3.50);
INSERT 语句的三种形式- 改变列顺序:可改变列名和数据值的顺序
- 省略列名:数据值必须有,且与列顺序完全相同
- 省略部分列
SELECT语句查看表
SELECT*FROM my_contacts;NULL:代表未定义的值
可以把列改为不接受NULL,但一定要提供NOT NULL列的值,否则会出现错误信息
CREATE TABLE my_contacts
(last_name VARCHAR (30) NOT null);使用DEFAULT 填补空白
如果某些列通常有某个特定值,可把特定值指派为DEFAULT默认值
跟在DEFAULT关键字后的值会在每次新增记录时自动插入表中。
默认值的类型必须和列类型相同CREATE TABLE doughnut_list
( doughnut_name VARCHAR(10) NOT NULL,
doughnut_cost DEC(3,2) NOT NULL DEFAULT 1.00);
SELECT语句
1.WHERE :提供搜索的特定条件
SELECT * FROM my_contacts
WHERE first_name = 'zhang';
*:返回表中的所有列
2.单引号与不需要单引号
数据类型中,VARCHAR, CHAR,BLOB,DATA,TIME需要单引号。数字类的类型,DEC和INT不需要引号
3.当单引号为特殊字符,需加反斜线或在单引号前再加单引号
INSERT INTO my_contacts
(location)
VALUES
('Grover\'s Mill');
INSERT INTO my_contacts
(location)
VALUES
('Grover''s Mill');
4.只显示特定数据
用列名代替 *
SELECT drink_name, main, second FROM easy_drinks WHERE main ='soda';
5.AND 同时处理两项查询
SELECT drink_name FROM easy_drinks
WHERE
main = 'soda'
AND
amount1 = 1.5
OR:返回符合条件之一的数据
6.比较运算符
* =
* <> / !=
* (>=)
* <=
* 可用于数据数据或文本数据的比较
SELECT drink_name
FROM drink_info
WHERE
drink_name >= 'L'
AND
drink_name < 'M';
7.用 IS NULL 找到 NULL
唯一直接选择NULL 的方法是利用关键字IS NULL
SELECT drink_name
FROM drink_info
WHERE
calories IS NULL;
8.LIKE 查找部分文本字符串并返回所有符合匹配条件的行
- 通配符%——任意数量未知字符的替身
SELECT first_name FROM my_contacts WHERE first_name LIKE '%im';
查询在first_name列中所有以im结尾的值 - 通配符下划线(_)——一个未知字符的替身
SELECT first_name FROM my_contacts WHERE first_name LIKE '_im';
查询结果例如:Kim
9.选取一个范围
- AND
SELECT drink_name FROM drink_info
WHERE
calories >= 30
AND
calories <= 60;
- BETWEEN
SELECT drink_name FROM drink_info
WHERE
calories BETWEEN 30 AND 60;
10.查找是否在多个筛选条件 IN
SELECT date_name FROM
black_book
WHERE
rating IN('innovative', 'fabulous',
'delightful', 'pretty good');
- 或者不符合特征的结果 NOT IN
SELECT date_name from black_book
WHERE NOT date_name LIKE 'A%'
AND NOT date_name LIKE 'B%';
DELETE 和 UPDATE
- DELETE 与WHERE,AND,OR结合
DELETE FROM doughnut_ratings
WHERE location = 'Krispy King' AND rating >5;
2.创建新记录并删除旧记录
SELECT——INSERT——DELETE,先用SELECT 挑选你必须移除的记录,确认记录无误,并没有误删其他记录,用INSERT添加新的信息,再删除旧的信息
SELECT * FROM clown_info
WHERE
activities = 'dancing';
INSERT INTO clown_info
VALUES
('CLARABELLE', 'Belmont senior', 'F,pink hair', 'dancing');
DELETE FROM clown_info
WHERE
activities = 'yelling, dancing' AND name = 'Clarabelle';UPDATE改变数据
UPDATE doughnut_ratings
SET
type = 'glazed'
WHERE type = 'plain glazed';不加where子句,SET子句提到的表中的每行的每列都会被修改
只改变type列中数值为plain glazed的行使用UPDATE, 可以改变单一列或所有列的值。在SET子句中加入更多column=value组,期间以逗号分隔:
UPDATE your_table
SET first_column = 'newvalue',
second_column = 'another_value';- 一次更改多个数值
UPDATE drink_info
SET cost = cost + 1
WHERE
drink_name = 'Blue Moon'
OR
drink_name = 'Oh My Gosh'
OR
drink_name = 'Lime Fizz';
聪明的表设计
创建表
- 表描述的事物
- 用什么方式描述事物
- 列是否包含原子性数据,让查询简短又方便
原子性数据 规则
- 具有原子性数据的列中不会有多个类型相同的值
- 具有原子性数据的表中不会有多个储存同类数据的列
规范化表的优点
- 规范化表中没有重复的数据,可以减少数据库的大小
- 因为查找的数据较少,查询更为快速。
完全的规范化INF
- 每个数据行必须包含具有原子性的值
- 每个数据行必须具有独一无二的识别项——主键
主键:表中的某个列,让每一条记录成为唯一的,用于独一无二地识别出每条记录。 PRIMARY KEY
主键的规则
- 主键不可以为NULL
- 插入新记录时必须制定主键值
- 主键必须简洁
- 主键值不可以被修改
为现有的表添加主键
ALTER TABLE 并添加PRIMARY KEY
ALTER TABLE my_contacts
ADD COLUMN contact_id INT NOT
AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (contact_id);- AUTO_ONCREMENT
若在列的声明中使用这个关键字,则每次执行INSERT命令来插入数据时,它都会自动给列赋予唯一的递增整数值。
ALTER 改写历史
添加一列
ALTER TABLE my_contacts
ADD COLUMN phone VARCHAR(10)
AFTER birst name;
ADD COLUMN 添加列
ALTER :把phone列放在birst_name列后
不使用的话,新列会添加到表最后修改表
- CHANGE :可同时改变现有列的名称和数据类型
- MODIFY:修改现有列的数据类型和位置
- ADD:在当前表中添加一列
- DROP:从表中删除某列
- DESCRIBE 查看表的构成
更换名称
- 更换表的名称
ALTER TABLE projekts
RENAME TO project_list; 改变列名,并标注为主键
ALTER TABLE project_list
CHANGE COLUMN number proj_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (proj_id);
AUTO_INCREMENT自动填入递增的整数
ADD……——使用新命令的列作为主键更换两个列
ALTER TABLE project_list
CHANGE COLUMN descriptionof proj_desc VARCHAR(100),
CHANGE COLUMN contractoronj con_name VARCHAR(30);
- 更换表的名称
只改变数据类型, 关键字:MODIFY
ALTER TABLE project_list
MODIFY COLUMN proj_desc VARCHAR(120);
project_list 要修改的列名
VARCHAR(120)新数据类型, 保证新类型不会造成旧数据被截断。卸除列DROP COLUMN
ALTER TABLE project_list
DROP COLUMN start_date;使用FIRST, LAST, BEFORE column_name, AFTER column_name, SECOND,THIRD, FOURTH等关键字,可调整列的顺序
增加数据的原子性——把一列分成两列,如:将(Seattle , WA) 分成不同的两个列
- 提取字符
- RIGHT()和LEFT()可以从列中选出指定数量的字符
SELECT RIGHT(location, 2) FROM my_contacts;
(RIGHT从列的右侧开始
2 从列的右侧开始选取的字符数量) 选取逗号前的所有内容SUBSTRING_INDEX()
SELECT SUBSTRING_INDEX(location, ',', 1) FROM my_contacts;
(SUBSTRING_INDEX,提取单引号里的字符串,然后取出它前面的所有内容
, 命令要寻找的逗号
1表示名利要寻找的第一个逗号,然后提取它前面的所有内容)将现有列的内容填入新列
UPDATE my_contacts
SET state = RIGHT(location, 2);
(state, 储存州数据的新列
RIGHT……..提取location列的最后两个字符)
这篇博客介绍了SQL的基本概念,包括数据和表、SELECT、DELETE和UPDATE语句,强调了聪明的表设计和ALTER操作。通过实例展示了如何创建、查询、修改和删除数据,以及如何设计规范化表和设置主键。
542

被折叠的 条评论
为什么被折叠?



