写给自己
总是追求忙碌,在忙碌中却不知追求什么。一个总是闲不下来的自己,或许只有在广泛的涉猎中才能找到什么是最适合自己的,毕竟没有尝试,就没有资格评价。之前做项目时,也曾经接触过Android中的SQLite,但是那个时候涉猎的还是太浅了。数据库的知识我发现还是很必须的,无论实在实习还是项目中,从今天开始,从零开始,让这份博客记录我学习的足迹,成为我学习的笔记吧~~~(撒花,鼓掌)
本文主要介绍何为SQL,并介绍SQL最重要的增删查改功能中的“查”
写在前面
大数据时代,数据为王
数据库简述
何为SQL
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。
SQL 让您可以访问和处理数据库。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
数据库基本术语
- 数据库: 数据库是一些关联表的集合。.
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余可以使系统速度更快。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
SQL数据类型
结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型。
字符型(VARCHARVS CHAR)
VARCHAR型和CHAR型数据用来储存字符串长度小于255的字符。
VARCHAR和CHAR的区别
1、向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates,取出的数据其长度为十个字符,即字符串Bill Gates的长度;把字符串输入一个长度为四十个字符的CHAR型字段中,取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。
2、VARCHAR型字段的比CHAR型字段占用更少的内存文本型(TEXT)
文本型数据,可以存放超过二十亿个字符的字符串。适用于需要存储大串的字符
p.s.
文本型数据没有长度,一个文本型字段中的数据通常要么为空,要么很大。
只要能避免使用文本型字段,就应该不使用。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。数值型(整数INT 、小数NUMERIC、钱数MONEY)
通常,为了节省空间,应该尽可能的使用最小的整型数据。
一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。一个NUMERIC型字段可以存储从-10^38到10^38范围内的数。
可以使用 INT型或NUMERIC型数据来存储钱数。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。逻辑型(BIT)
BIT型字段只能取两个值:0或1。
p.s.:创建好一个表之后,不能向表中添加 BIT型字段。如果打算在一个表中包含BIT型字段,必须在创建表时完成。日期型(DATETIME 对比 SMALLDATETIME)
DATETIME型的字段可存储的日期 1753年1月1日第一毫秒到9999年12月31日最后一毫秒。
一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。
SQL语法
数据库表
一个数据库通常包含一个或多个表。每个表由一个名字标识(例如 “Customers” 或者 “Orders”)。表包含带有数据的记录(行)。
每一行代表一个城市,共三列来描述一行的内容
SQL语句
语句 | 功能 |
---|---|
SELECT | 从数据库中提取数据 |
UPDATE | 更新数据库中的数据 |
DELETE | 从数据库中删除数据 |
INSERT INTO | 向数据库中插入新数据 |
CREATE DATABASE | 创建新数据库 |
ALTER DATABASE | 修改数据库 |
CREATE TABLE | 创建新表 |
ALTER TABLE | 变更(改变)数据库表 |
DROP TABLE | 删除表 |
CREATE INDEX | 创建索引(搜索键) |
DROP INDEX | 删除索引 |
select语句
1、SELECT 语句用于从数据库中选取数据。
基本语法
SELECT column_name,column_name FROM table_name;
SELECT * FROM table_name;
2、SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
语法
SELECT DISTINCT column_name,column_name FROM table_name;
3、SELECT TOP, LIMIT, ROWNUM
SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
p.s.:并非所有的数据库系统都支持 SELECT TOP 子句。
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s) FROM table_name;
MySQL语法
SELECT column_name(s) FROM table_name LIMIT number;
Oracle 语法
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
where语句
1、WHERE 子句用于提取那些满足指定标准的记录。
SQL WHERE 语法
SELECT column_name FROM table_name WHERE column_name operation value;
e.g.
SELECT * FROM Customers WHERE Country=’Mexico’;
从Customers” 表中选取国家为 “Mexico” 的所有客户
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值字段,请不要使用引号
e.g.
SELECT * FROM Customers WHERE CustomerID=1;
下面的运算符可以在 WHERE 子句中使用:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
(>=) | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
>
2、LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
LIKE 语法
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
e.g.
SELECT * FROM Customers WHERE City LIKE ‘s%’;
选取 City 以字母 “s” 开始的所有客户
运算符 | 描述 |
---|---|
s% | 以s开头的字符 |
%s | 以s结尾的字符 |
%s% | 包含s的 |
not s | 不包含s的 |
这里涉及到SQL的通配符,正则表达式
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] or [!charlist] | 不在字符列中的任何单一字符 |
[charlist] 通配符
下面的 SQL 语句选取 City 以 “b”、”s” 或 “p” 开始的所有客户:
SELECT * FROM Customers WHERE City LIKE ‘[bsp]%’;
下面的 SQL 语句选取 City 不以 “b”、”s” 或 “p” 开始的所有客户:
SELECT * FROM Customers WHERE City LIKE ‘[!bsp]%’;
>
3、IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
语法
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,…)
e.g.选取姓氏为 Adams 和 Carter 的人
SELECT * FROM Persons WHERE LastName IN (‘Adams’,’Carter’)
4、BETWEEN 操作符
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
语法
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
e.g.以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人
SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’
AND & OR 运算符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
AND 运算符实例
SELECT * FROM Customers WHERE Country=’Germany’ AND City=’Berlin’;
从 “Customers” 表中表中选取国家为 “Germany” 且城市为 “Berlin” 的所有客户
OR 运算符实例
SELECT * FROM Customers WHERE City=’Berlin’ OR City=’München’;
从 “Customers” 表中选取城市为 “Berlin” 或者 “München” 的所有客户:
ORDER BY 关键字
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC (降序)关键字。
语法
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC