注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

张志帅 廊坊师范学院信息技术提高班十四期

懒惰、急躁、傲慢、爱分享的Mr.Baymax

 
 
 

日志

 
 

SQL入门笔记  

2017-08-06 17:27:33|  分类: S V |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |



第一章 SQL简介

1.2结构化查询语言
SQL(structured Query Language)结构化查询语言,一种声明性语言。
1.3创建数据库

创建数据库的SQL如下:
CAREATE DATABASE myFirstDatabase
删除myFirstDatabase数据库的SQL语句如下:
DROP DATABASE myFirstDatabase(删除数据库之后,将删除数据库中的所有数据)

常用ANSI SQL数据类型的一个子集和其他RDBMS中的相同数据类型的名称
每种数据类型和每一种数据类型使用的存储空间以及示例

固定长度和可变长度数据类型的差别
char(127):RDBMS会分配足够的存储器空间来容纳127个字符,容易浪费(如果仅存储10个字符,完全可以用"char(10)",若为127,剩下的117会被空格填充)
varchar(127):不会预分配存储器空间
字符
字符数据类型的变种:
固定长度
可变长度
每个字符占用1个字节(char&varchar类型)
-----------------2-----------nchar&nvarchar---
char/varchar数据类型使用1个字节存储一个字符------ASCII存储器----255个字符(固定长度)
nchar/nvarchar数据类型使用两个自己存储一个字符------Unicode字符集----65536个字符(可变长度)通用
数值数据
整型数据类型int(-32768~32767)&smallint(-2.147483648~2147483647)
数值型类型可以存储小数部分:real(-3.40E+38~3.40E+38)&decimal
real与decimal的异同:
同:都允许存储浮点数值(具有小数部分的数值——小数点之后具有一些数字——并且小数点不固定在特等的位置)
异:后者存储所有能够存储的数字,若存储的数值大于它能够处理的数值,则RDBMS会抛出一个错误 ,产生了溢出,故,小数点左边的数字总是正确的,
后着更灵活,允许声明需要存储的数字的数目,以及小数点右边可以出现的数字的数目。
日期和时间
大多数RDBMS使用24小时的始终,故:存储5:36PM需要写成17:36:00
1.4创建、更改、和删除表
创建表
基本语法
CREATE TABLE_of_table
{
name_of_column column_data
}
更改现有表
添加列:
ALTER TABLE name_of_table
ADD name_of_field data_type
删除列:
ALTER TABLE name_of_table
DROP COLUMN name_of_field
删除现有表
DROP TABLE name_of_table


第二章 输入信息

2.1插入新数据
INSERT INTO table_name (column_name) VALUES (data_values)
eg:
检查添加的数据是否正确的方法:
使用RDBMS的管理工具查看表中的数据
使用SQL语句查看:SELECT *FROM Category
2.2将数据插入到案例分析数据库
2.3更新数据
UPDATA table_name
SET column_name = value
WHERE condition
比较运算符

逻辑运算符AND&OR
AND运算符意味着它左边的条件与右边的条件必须为真
OR运算符意味着当一个表达式为真或者两个表达式都为真时,条件为真
2.4 删除数据
DELETE FROM 表名称 WHERE 列名称 = 值
所有应用与UPDATA语句中的WHERE字句的内容也可以应用于DELETE语句的WHERE字句


第三章 提取信息

3.1SELECT语句
基本语法:
SELECT column1, column2, column3,…… columnx, FROM table_name
返回所有列的方法:
SELECT * FROM Location=SELECT Location,Street,City,State From Location
注意:仅当需要所有列时,才能使用速记方式
3.1.1 仅返回不同的行
如果想知道一个记录中所有的唯一值,检索的方式是使用DISTINCT关键字。
SELECT DISTINCT 列名称 FROM 表名称
3.1.2 使用别名
如果不想在结果中返回LastName,而是取代为一个称为Surname的别名,使用下面语句
SELECT LastName AS Surname FROM MemberDetails
3.1.3 利用WHERE子句过滤结果
3.2 逻辑运算符和运算符优先级
运算符优先级概述
使用逻辑运算符
NOT运算符:在条件为假时选择一个记录----<>
BETWEEN运算符:允许指定一个范围-----<=和>=
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
LIKE运算符:当搜索一个字符片段时,此运算符允许使用通配符,通配符不匹配特定的字符,匹配任意一个字符或者任意一个或多个字符
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
IN运算符:功能类似OR运算符,但是输入较少
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
3.3 利用ORDER BY 排序结果
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
SELECT Company, OrderNumber FROM Orders ORDER BY Company---以字母顺序显示公司名称
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC---以逆字母顺序显示公司名称
连接列:
MS SQL Server 和MS Access
两者串连列和数据的方式相同——利用串连运算符(+)
Oracle和IBM DB2
在上述两者中,存在两种串连文本数据或者基于文本的咧的方式
第一种使用串连运算符,使用两条垂线“||”---
第二种是使用CONCAT()函数
MySQL
使用函数进行串连
第一个是CONCAT(),在MySQL中,可以使用多于两个的参数,可以连接列,也可以连接字符串字面量
第二个是使用MySQL所提供的CONCAT_WS( )函数,此函数在所串连的每一列或字面量之间添加一个分隔符号
3.4 从多个表中选择数据
在SQL中,JOIN关键字将一个或多个表联合为一个结果集。
JOIN 分为内连接,外连接(左外连接,右外连接,全外连接)
内连接: SELECT A.* FROM A INNER JOIN B ON A.ID=B.ID
左外连接: SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID
右外连接: SELECT A.* FROM A RIGHT JOIN B ON A.ID = B.ID
全外连接: SELECT A.*, B.* FROM A FULL OUTER JOIN B ON A.ID = B.ID
在MS Access中使用圆括号括起内部联合

SQL是基于集合的
3.5 NULL数据概述
没有特定值的字段实际上具有值,即NULL
NULL表示未知,与什么都没有不是一回事。


第四章 数据库的高级设计

4.1标准化
第一范式:
要求每个表都具有一个主键,可以由一个列或者多个列组成
主键是记录的唯一标识符
第二范式:
要求主键中的人一列必须没有局部相关性
第三范式:
符合第二范式的要求
所有非主键字段都依赖于主键
4..2 利用约束确保数据的有效性
NOT NULL约束
确保列必须有一个值,否则记录就不能被插入到数据库中
UNIQUE约束
防止一个特定的列中两个记录有一致的值
添加方式:在创建表时,创建表之后
CHECK约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
主键和PRIMATY KEY约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
最常用,最重要
外键
是访问另外一个表中的主键的列。主键和外键创建了不同表中数据的相互关系。一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
创建外键的基本语法
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
4.3 利用索引加速结果查询
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引的语法:
CREATE INDEX index_name
ON table_name (column_name)

设计更好的数据库的一些技巧:
不要设计仅满足普通情形的数据库
为表和字段选择有意义的名称
尽量使名称简单
命名和数据类型的选择要一致
首先在纸上分析数据要求
仔细选择主键
创建一个索引
添加一个多列索引
避免使用保留字作为表名或者字段名
考虑存储空间需求


第5章 操作数据
5.1.2常用数学函数
ABS()---返回数值的绝对值
POWER()---得到一个数值的乘幂值
POWER(expression,power_raise_to)
SQRT()函数---得到一个数值的平方根
SQRT(expression_to_squareroot)
RAND()函数---生成0和1之间的一个随机小数
5.1.3 舎入数值
CEILING()函数---删除小数点之后的所有数值,向上舍入到相邻的最大整数
CEILING(number_to_be_reounded)
FLOOR()函数---与------------------------------------------------------------小------
FLOOR(number_to_be_reounded)
ROUND()函数---舍入到最接近的整数值
SELECT ROUND(column_name,decimals) FROM table_name
参数描述
column_name必需。要舍入的字段。
decimals必需。规定要返回的小数位数。

5.2 字符串函数
5.2.1 SUBSTRING()函数---允许获得一个字符串中的某部分
5.2.2 大小写转换函数
UPPER()函数---大写
LOWER()函数---小写
5.2.3 REVERSE()函数---颠倒一个字符串中字符的顺序
5.2.4 TRIM()函数---包含删除一个字符串的开始或者末尾部分中不想要的字符
LTRIM删除字符左边的任意空格,RTRIM删除字符右边的任意空格
5.2.5 LENGTH()函数---找出一个字符串中存在多少字符
5.2.6 SOUNDEX()函数---将一个字符串转换为一种特殊的4字符编码
SOUNDEX(name_to_be_converted_to_code)
5.2.7 日期函数
DAY()函数---DAY(date)
MONTH()函数---MONTH(date)
YEAR()函数---YEAR(date)

5.3不同数据类型的转换
CAST()函数--将数据转换为特定的数据类型
CAST(expression AS data_type)

5.4再论NULL
5.4.1 NULL与数学
如果出现在任何SQL数学中,结果总是NULL
5.4.2 NULL与字符串
5.4.3 COALESCE()函数
返回传递给它作为参数值列表中的第一个非NULL值。若全为NULL,则返回NULL
5.4.5 INSERT INTO&SELECT语句的综合使用
基本语法:
INSERT INTO destination_table_name
SELECT column_list FROM
source_table_name
WHERE condition
注意:在使用此语法的时候,目的列和源列必须匹配,列的数目还有对应的数据类型必须匹配


第6章 分组和聚合数据

6.1 分组结果
GROUP BY 子句---将一致的数据分组到一个子集中
6.2 汇总和聚合数据
6.2.1 统计结果的数目
COUNT()函数---用于统计结果中记录的数目。
6.2.2 累加结果
SUM()函数---将传递给它作为参数的,表达式中的所有制累加在一起。
SELECT SUM(column_name) FROM table_name
6.2.3 求结果的平均值
AVG()函数---返回数值列的平均值。NULL 值不包括在计算中。
SELECT AVG(column_name) FROM table_name
6.2.4 求结果的最大值和最小值
MAX()函数---返回一列中的最大值。NULL 值不包括在计算中。
SELECT MAX(column_name) FROM table_name
MIN()函数---返回一列中的最小值。NULL 值不包括在计算中。
SELECT MIN(column_name) FROM table_name
6.3 综合使用HAVING子句和GROUP BY语句
HAVING 子句在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
GROUP BY用于结合合计函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name


第7章 从不同的表中选择数据

7.1 再论联合
7.1.1 深入介绍内部联合
内部联合要求在联合中的两个表中必须具有匹配的记录
1.等值联合和不等值联合
等值联合只包含的ON子句条件包含一个等号(=)运算符
one_table INTER JOIN another_table
ON one_table,some_field=another_table,another_field
不等值联合的子句不包含相等计算(<,>,<=,>=)
2.多个联合与多个条件
3.交叉联合
最基本的联合
4.自联合
7.1.2外部联合
1.左外部联合
在左外部联合中,OUTER JOIN语句左边表中的所有记录都被返回在结果中,无论是否在OUTER JOIN 语句左边存在一个匹配记录
SELECT column_list
FROM left_table LEFT OUTER JOIN right_table
ON condition
2.右外部联合
与左联合相反
SELECT column_list
FROM left_table RIGHT OUTER JOIN right_table
ON condition
7.2 利用UNION运算符组合结果集
使用UNION运算符将两个或者多个SELECT查询结果联合到一个结果集中
要求:
每个查询必须产生数目相同的列
列的数据类型必须相同


第8章 子查询
8.1 子查询术语
外部查询是主SELECT语句
在标准查询中嵌套——即放置在外部查询内——一个子查询,此时子查询被称为内部查询
8.2 SELECT列表中的子查询
可以将子查询作为SELECT查询内的返回一个值的表达式,就像返回值中的单个列一样。
8.3 WHERE子句中的子查询
有WHERE子句的地方,就有子查询
8.4 子查询中的运算符
8.4.1 再论IN运算符
8.4.2 使用ANY、SOME、ALL运算符
1.ANY和SOME运算符
两者是一致的,完成相同的工作
2.ALL运算符
要求列表中的每一项(一个子查询的所有结果)符合用于ALL的比较运算符所设置的条件。
8.4.3 使用EXISTS运算符
检查记录行,但不比较列
8.4.4 在HAVING语句中使用子查询
8.5 相关子查询
是指访问外部查询的子查询
8.6 用于其他语句的子查询
8.6.1 在INSERT语句中使用子查询
8.6.2 在UPDATE中使用子查询
8.6.3 在DELETE FROM语句中国使用子查询


第9章 高级查询

9.1 更新数据库
9.2 处理复杂的查询
创建复杂查询时遵循的原则:
确定需要什么数据;创建SELECT子句,填充它的列列表;找出需要从哪些表中获得数据,并创建SELECT语句的FROM子句;一步一步创建FROM子句;最后编写不影响最终结果的查询元素。
9.3 高效查询的一些技巧
使用AND时,将很不可能为真的条放在前面
-----OR-------------最可能----------------------
DISTINCT比GROUP BY更快
限制联合的结果
对子查询使用IN运算符
对整数类型进行搜索



  评论这张
 
阅读(5)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017