注:
1.本文为《SQL必知必会》(作者:Ben Forta)的学习笔记;
2.以下每一节中出现的sql语句的例子仅仅是作为一个语法示例;
1.了解数据库
概念:数据库(database)、表(table)、列(column)、行/记录(row)、主键(primary key)。
SQL数据类型说明:
字符串数据类型,通常用来存储例如名字、地址、电话号码、邮政编码等的数据。有两种基本的字符串类型,分别为定长字符串和变长字符串。字符串值必须括在单引号内。
CHAR-1~255个字符的定长字符串;
NCHAR-CHAR的特殊形式,用来支持多字节或Unicode字符;
NVARCHAR-TEXT的特殊形式,用来支持多字节或Unicode字符;
TEXT(或LONG、MEMO、VARCHAR)-变长文本;
数值数据类型。
BIT-单个二进制,0或1;
DECEMAL(或NUMERIC)-定点或精度可变的浮点数;
FLOAT(或NUMBER)-浮点数;
INT(或INTEGER)-4字节整数;
REAL-4字节浮点数;
SMALLINT-2字节整数,-32768~32767;
TINYINT-1字节整数,0~255;
日期和时间数据类型,不同DBMS可能格式不同。通常的日期格式为‘2015-12-30’,通常的事件格式为‘21:46:29’。
DATE-日期;
DATETIME(或TIMESTAMP)-日期时间;
SMALLDATETIME-日期时间,精确到分;
TIME-时间;
二进制数据类型,可包含诸如图像、多媒体、字处理文档等数据。
BINARY-定长二进制数据;
LONG RAW-变长二进制数据,最长2GB;
RAW(某些DBMS实现为BINARY)-变长二进制数据,最长255B;
VARBINARY-变长二进制数据;
2.检索数据
SELECT关键字。可以检索多个列;SQL关键字不区分大小写,例如select,Select,SELECT会被识别为同一个关键字。但是对于表名和列名,需要区分大小写。
select * from products;
select prod_id,prod_name from products;
DISTINCT关键字。检索唯一值,DISTINCT会保证检索出来的数据结果只包含不同的项,如果DISTINCT后面跟随有多个列,那会是这些列的组合。
select distince vend_id from products;
注释:行注释:–test; #test;块注释:/test/;
3.排序
ORDER BY关键字。ORDER BY字句必须是SQL语句的最后一个子句,否则会报错。当按多个列排序的时候,会依次按照指定的各个列进行排序。ASC(ascending)是升序排序,DESC(descending)是降序排序。
select * from products order by prod_name DESC;
4.过滤数据
查询时需要伴随搜索条件(或称为过滤条件),使用WHERE子句进行过滤。注意ORDER BY子句要出现在WHERE子句之后。
WHERE子句操作符包括:
=:等于;
<>、!=:不等于(其中<>语法更早,兼容性较好);
<:小于;
<=:小于等于;
!<:不小于;
:大于;
=:大于等于;
!>:不大于;
BETWEEN… AND…:在两者之间;
IS NULL:为NULL值;
select * from products where prod_price between 5 and 10;
select * from products where prod_price is null;
5.高级数据过滤
WHERE字句可以使用操作符进行连接,连接操作符有AND和OR。在同时出现两个操作符的情况下,AND的计算优先级更高,所以多个操作符的字句需要用括号进行优先级区分。
select * from products where (vend_id=’DLL01’ or vend_id=’BSR01’) and prod_price>=10;
IN关键字。IN用来指定条件范围,范围中的每个条件都匹配,各个条件用逗号分隔。IN其实实现了OR的功能,但是其性能优于OR。IN可以包含其他SELECT语句,从而能动态的建立WHERE字句。
select * from products where vend_id in (‘DLL01’,BRS01’’);
NOT关键字。NOT否定其后跟随的条件语句。NOT经常和IN一起连用。
select * from products where not vend_id=’DLL01’;
6.通配符过滤
L