Head First SQL笔记

看的时候总结了一下,如下:

Chapter 1:

创建数据库

CREATE DATABASE database_name;

使用数据库

USE database_name;

创建表

CRATE TABLE table_name

(

col2 VAR_TYPE,

col1 VAR_TYPE NOT NULL DEFAULT xxx,

);

删除表

DROP TABLE table_name;

显示表

DESC table_name;

DESCRIBE table_name;

插入数据

INSERT INTO table_name

(col1, col2)

VALUES (col1_val, col2_val)

还有其它形式的插入数据方式,不一一列举啦

Chapter 2:

查询

SELECT * FROM table_name [WHERE col1 = xxxx AND col2 = yyyy]

SELECT col1, col2 col3 FROM table_name [WHERE col1 = xxxx];

SELECT col1, col2 col3 FROM table_name [WHERE col1 IS NULL];

SELECT col1, col2 col3 FROM table_name [WHERE col1 IS NOT NULL];

SELECT col1, col2 col3 FROM table_name [WHERE col1 LIKE xxxx];

SELECT col1, col2 col3 FROM table_name [WHERE NOT col1 LIKE xxxx];

SELECT col1, col2 col3 FROM table_name [WHERE col1 BETWEEN xxx AND yyy];

SELECT col1, col2 col3 FROM table_name [WHERE NOT col1 BETWEEN XXX AND yyy];

SELECT col1, col2 col3 FROM table_name [WHERE col1 IN (xxx, yyy, ZZZ)];

SELECT col1, col2 col3 FROM table_name [WHERE col1 NOT IN (xxx, yyy, ZZZ)];

SELECT col1, col2 col3 FROM table_name [WHERE NOT col1 LIKE xxxx AND NOT col2 = yyyy];

比较运算符:

=

>

>=

<

<=

<> 不等于

通配符:

% 匹配任意多个字符

_ 匹配任意一个字符

字符串转义字符:

\‘

‘‘

上面两个都表示单引号

表示字符串时不要使用双引号,双引号用来在PHP中表示SQL语句使用

Chapter 3:

DELETE 删除操作

DELETE FROM table_name;

DELETE FROM table_name WHERE col1 = xxxx;

WHERE语句的用法与SELECT语句中的一样

UPDATE 更新操作

UPDATE table_name SET col1 = xxxx, col2 = yyyy [WHERE col1 = zzzz]

WHERE语句的用法与SELECT语句中的一样

Chapter 4:

1NF:每个列必须是原子的,第个行必须有主键。表中没有重复类型的值[不能有数组]。

SHOW 命令,用法请自己体会:

SHOW CREATE TABLE table_name;

SHOW CREATE DATABASE db_name;

SHOW COLUMNS FROM table_name;

SHOW INDEX FROM table_name;

SHOW WARNINGS;

指定主键(NOT NULL不是必须的,但是主键加上这个限制是应该的):

CREATE TABLE table_name(

col1 COL1_TYPE NOT NULL,

col2 COL2_TYPE,

PRIMARY KEY (col1)

);

指定自动递增:

CREATE TABLE table_name(

col1 COL1_TYPE NOT NULL AUTO_INCREMENT,

col2 COL2_TYPE,

PRIMARY KEY (col1)

);

每个表中只有一列可以被定义为AUTO_INCREMENT

Chapter 5:

ALTER 改变表

修改表名称:

ALTER table_name1 RENAME TO table_name2;

增加一列:

ALTER TABLE table_name ADD COLUMN col_name COL_TYPE FIRST;

指定位置还可以使用:

SECOND, AFTER col_name, BEFORE col_name

增加主键:

ALTER TABLE table_name ADD PRIMARY KEY (col_name);

修改列:

ALTER TABLE table_name CHANGE COLUMN orig_name ,new_name NOT NULL AUTO_INCREMENT;

(CHANGE用来重新定义一个列,所以后面的部分跟重新定义一个列是一样的)

只改变数据类型,不改变列名称:

ALTER TABLE table_name MODIFY col_name NEW_TYPE;

删除列:

ALTER TABLE table_name DROP COLUMN col_name;

一些字符串处理函数:

LEFT(col_name, count)

RIGHT(col_name, count)

SUBSTRING(col_name, fs, count) 返回第count个fs之前的所有字符

UPPER(col_name)

LOWER(col_name)

REVERSE(col_name)

LTRIM(col_name) 删除最左边的空白

RTRIM(col_name)

LENGTH(col_name)

其中的col_name都可以直接换成字符串

ALTER无法直接改变列的顺序,需要先删除之前的列,再把这个列插入到想要的位置。

Chapter 6:

CASE:

UPDATE table_name SET col_name=

WHEN

CASE col1 = val1 THEN val11

CASE col2 = val2 THEN val22

CASE col3 = val3 THEN val33

ELSE val_default

END;

ORDER BY:

SELECT col1, col2 WHERE col3 = XXXX

ORDER BY col1 DESC, col2 ASC;

先按col1排序,再按col2排序,也可以只选一个列来排序,可以指定升序(ASC, ASCENDING)或降序(DESC, DESCENDING)

数值处理函数:

SUM(col_name)

AVG(col_name)

MIN(col_name)

MAX(col_name)

COUNT(col_name)

这些函数会忽略掉NULL的存在

分组:

GROUP BY col_name

去重:

DISTINCT col_name

限制个数:

LIMIT n;

LIMIT m, n;从第m个开始的n个

Chapter 7:

外键:

外键引用的主键被称为父键

外键所在的表被称为父表

外键的值可以为NULL

创建带有外键的表:

CREATE TABLE table_name

(

col1 TYPE,

col2 TYPE,

CONSTRAINT parent_table parent_col_name

FOREIGN KEY (col2)

REFERENCE parent_table (parent_col_name)

);

其它约束:

UNIQUE

CHECK(MySQL不支持)

通过分表来处理违反第一范式的情况

通过建中间表来处理多对多的情况

组合键:两个以上列组成的主键。

2NF:符合1NF的基础上,没有部分函数依赖。

已经符合1NF的表,如果只有一个主键的话,肯定符合2NF。

3NF:符合2NF的基础上,没有传递函数依赖。

(传递函数依赖是指非键列之间的依赖关系 。)

Chapter 8:

AS指定别名:

SELECT col_name AS new_name; 指定列别名

SELECT col_name FROM table_name AS new_name; 指定表别名

其中的AS也可以省略,注意别名和原名之间不能有逗号隔开

INNTER JOIN内联接:

有四种内联接,CROSS JOIN, QEUIJOIN, NON-QEUIJOIN, NATURAL-JOIN

SELECT table1.col1, table2.col2 FROM table1 CROSS JOIN table2; 其中CROSS JOIN可以用逗号代替

SELECT table1.col1, table2.col2 FROM table1 INNER JOIN table2 ON some_condition;

equijoin相等连接:

SELECT table1.col1, table2.col2 FROM table1 INNER JOIN table2 ON table1.coln = table2.colm;

non-equijoin不等连接:

SELECT table1.col1, table2.col2 FROM table1 INNER JOIN table2 ON table1.coln <> table2.colm;

natural-join自然连接(两个表里面有相同的列时可用):

SELECT table1.col1, table2.col2 FROM table1 NATURAL JOIN table2;

相等连接及不等连接中的ON换成WHERE也一样可以工作

Chapter 9:

SELECT col_name FROM table_name WHRE col_name IN (SELECT col_name2 FROM table_name2);

其它的子查询关键字还有NOT IN, EXISTS, NOT EXISTS, =, <>

子查询还可以用于选择列中

SELECT col1, col2, (sub_query) ...;

非关联子查询指子查询可以独立于外层查询独立的运行,关联子查询的意思刚好相反。尽量使用非关联子查询,可以加快查询的速度。

一般来说子查询应该只返回一列的结果,当用于IN, NOT IN, EXISTS, NOT EXISTS时可以返回多列的结果。

Chapter 10:

左外联接:

SELECT table1.col1, table2.col2 FROM table1 LEFT OUTER JOIN table2;

使用左表中的每一行与右表中的每一行比较,当匹配时则在结果中增加一行,如果左表中的某一行与右表中的所有行都不匹配,则也输出一行,不过结果中有NULL。左表中的第一行在输出结果中都会至少出现一次。

右外联接只是联接的方向变在了从右向左连接,其本质与左外联接一样。在工作中可以只使用一种外联接方式。

自引用外键:引用同一张中主键的列。

自己与自己JOIN(与其它内联接的方式相同,只要在右键的地方写上自己就行了,但是一般要对同一个键设两个不同的别名):

SELECT t1.col_name, t2.col_name FROM table1 AS t1 INTER JOIN table2 as t2 ON condition;

UNION(组合不同的搜索结果):

SELECT col_name FROM table1 UNION

SELECT col_name FROM table2 UNION

SELECT col_name FROM table3

ORDER by col_name;

这个命令会自动去重,如果要保留重复的结果,可以使用UNION ALL命令。UNION命令要求搜索出来的列数必须相同,且列类型要相同。SEL之间的顺序不会影响结果,即使不加ORDER BY命令。

INTERSECT和EXCEPT:

INTERSECT用来取两次SELECT的交集,即两个都有的部分。EXCEPT用来取两次SELECT的差集,即在一个的结果中但是不在另一个结果中的部分。

这两条命令不被MySQL支持,所以不写具体形式了。

在SELECT命令中,基本上子查询都可以用联接来代码。但是子查询还可以用UPDATE INSERT DELETE命令中。

用SELECT的结果来创建表:

CREATE TABLE AS SELECT ...;

Chapter 11:

CHECK约束:

用来确保插入到数据库中的列满足一定的条件(不被MySQL支持,所以不写具体形式了);

创建视图:

CREATE VIEW view_name AS

SELECT ...;

跟用SELECT的结果创建一个新表的命令相似,事实上,创建的视图也可以当作 一个新表来使用,可以使用SELECT语句来从中选择任意列,语法与普通SELECT完全一样:

SELECT * FROM view_name;

view_name部分会被替换成创建view时SELECT命令,作为这条SELECT语句中的子查询。

视图也可以用于UPDATE, INSERT, DELETE命令中,但是一般不推荐这样用。不过有一个hack功能却值得一试,就是用视图的CHECK OPTION来模仿其它数据库的CHECK约束。

CREATE VIEW view_name AS SELECT col1, col2 FROM table_name WHERE condition WITH CHECK OPTION;

以后对这个视图执行INSERT操作的话就会检查condition条件是否满足。

删除一个视图:

DROP VIEW view_name;

使用SHOW TABLES;命令可以查看当前数据库中的所有表和视图。

当一表出现在一个视图的创建命令中时,如果这个视图没有被删除,则这个表也不能被删除。

TRANSCATION:

事务是一组SQL命令,要么都被执行,要么都不执行,即具有原子性。且事务在提交之前可以回滚,就像这些语句一条都没有执行一样。

START TRANSACTION;

sql command;

sql command;

ROLLBACK;

START TRANSACTION;

sql command;

sql command;

COMMIT;

使用ROLLBACK会撤销START TRANSCATION;后面的所有语句。使用COMMIT命令会把START TRANSCATION命令后面的语句原子性都提交到数据库中。

MySQL中,只有BDB和InnoDB引擎才支持事务。事务是使用日志来实现的,在执行ROLLBACK或COMMIT之前,事务被存在日志中。

Chapter 12:

设置root密码:

SET PASSWORD FOR ‘root‘@‘hostname‘ = PASSWORD(‘new_password‘);

CREATE USER user_name IDENTIFIED BY ‘password‘;

使用这种方式创建的用户是没有任何权限的,也就是说,什么都干不了。

GRAND:

GRAND XXX ON table_name TO user_name1, username2;

GRAND XXX ON table_name TO user_name WITH GRANT OPTION; 用户还可以把这个权限再授予其它人

XXX可以是UPDATE, INSERT, DELETE, SELECT;

对于SELECT权限,还可以写成SELECT(col_name)的形式,表示只可以查看col_name列。

REVOKE:

REVOKE XXX ON table_name FROM username [CASCADE];

如果username有GRANT OPTION,且已经把权限授予了其它人,则这个命令也会把他授予其它人的这个权限一并撤销掉。

如果使用RESTRICT选项替代CASCADE选项,则在上面的情况下,会报错。

还可以只撤销再授予权限的权限:

REVOKE GRANT OPTION ON xxx ON table_name FROM username;

副作用是如果该用户已经把这个权限授予了他人,则会一并收回他授予他人的这个权限。

可以用通配符:

GRANT SELECT ON database_name.* TO user_name;

某个数据库中的所有表

GRANT SELECT ON *.* TO user_name;

所有数据库中所有表

可以创建角色,对角色授予权限,再把角色授予用户,MySQL不支持角色,所以这里就不具体写了。

时间: 2024-10-12 04:52:58

Head First SQL笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

Spark SQL笔记——技术点汇总

目录 · 概述 · 原理 · 组成 · 执行流程 · 性能 · API · 应用程序模板 · 通用读写方法 · RDD转为DataFrame · Parquet文件数据源 · JSON文件数据源 · Hive数据源 · 数据库JDBC数据源 · DataFrame Operation · 性能调优 · 缓存数据 · 参数调优 · 案例 · 数据准备 · 查询部门职工数 · 查询各部门职工工资总数,并排序 · 查询各部门职工考勤信息 概述 1. Spark SQL是Spark的结构化数据处理模块.

深入浅出SQL笔记1–数据和表

1.数据库的概念及组成 数据库是保存表和其他相关SQL结构的容器. 数据库是由各种各样的表构成的,一个数据库里面的表总是存在相互联系的关系. 数据库内的信息组成了表,表示由行和列构成的,行是一组能够描述某个事物的里列的集合,构成一个对象的属性,列是存储在表中的一块数据. 需要注意的是列也叫做:字段, 行也叫属性. 2.创建一个表的步骤: 1.在创建表前先把数据分类,尤其要注意每列的数据类型. 2.使用CREATE DATABASE语句来创建存储所有表的数据库. 创建一个名为gregs_list的