SQL入门学习笔记1.0
2017-06-02 17:03
232 查看
数据和表
数据库:保存表和其他相关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列的最后两个字符)
相关文章推荐
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server>(二十一)
- SQL入门学习笔记3.0
- Spark2.x学习笔记:13、Spark SQL快速入门
- java 从零开始,学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- sql 入门经典(第五版) Ryan Stephens 学习笔记 后续——存储引擎+锁
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第一,二,三,,四,五章)
- MySql学习笔记(三)SQL简单入门语句--Fenby摘抄笔记
- c++primer 学习笔记(1.0)快速入门
- SQL 学习笔记<一> 入门
- sql 入门经典(第五版) Ryan Stephens 学习笔记 第四部分:建立复杂的数据库查询/
- SQL和网页新学习笔记1.0
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
- sql 入门经典(第五版) Ryan Stephens 学习笔记 第五部分: 性能调整
- java 从零开始,学习笔记之基础入门<SQL_Server>(二十一)
- SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装
- java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- linq to sql 增删改查入门编[linq学习笔记一]
- Javascript:Javascript教程,javascript入门,学习笔记