SQL必知必会
第一课:了解SQL
1、不同的DBMS中,相同的数据类型拥有不同的名称。
1)表中的数据是按行存储的。
row(行)表中的一个记录。
表中的行有多种称呼,有的用户称之为数据库记录(record),有的称呼为行(row)这个两个专业术语可以交替使用,但是从技术上来说,“行(row)”才是正常的术语。
主键:primary key,一列(或者一组列)其值能够唯一的标识表中的每一行。
注意:应该总是定义主键,创建的每个表都应该有一个主键,以便于以后数据库的操作和管理。
表中的任何列都可以作为主键,只需要满足下列条件。
1)任意两行都不具有相同的主键值(唯一性)
2)每一行都必须 具有一个主键值(主键值不允许为null)
3)主键列中的值不允许修改或更新
4)主键值不能重用(如果某行从表中删除,它的主键不能赋值给以后的新创建的行。)
主键通常定义在表的一列上,也可以使用多个列作为主键(联合主键),多个列作为主键,上述4个条件必须应用到所有的列,所有列值的组合必须唯一(满足主键的唯一性)
SQL(structure qurey language)结构话查询语言,用来与数据库沟通的语言。
第二课:检索数据
注意:SQL不区分大小写,因此SELECT 和 select是一样的。
在处理SQL语句时,所有的空格都会被忽略。
select prod_name from products;
select prod_name
from products;
表示同样的意思。
说明:许多SQL开发人员喜欢对SQL关键字使用大写,而对列名和表名使用小写,这样做的目的是使代码更易于阅读和调式。
SELECT prod_name FROM products;
2、检索单个列
SELECT
prod_name
FROM
products;
大多数SQL开发人员认为将SQL语句分成多行更容易阅读和调式。
3、检索多个列
SELECT prod_id,prod_name,prod_price FROM products;
注意:多个列查询,SELECT关键字后面跟列名,多个列中间使用逗号“,”进行分隔,最后一个需要查询的列不用逗号分隔。
SQL语句一般返回无格式的原始的数据。
4、检索所有的列
SELECT * FROM products;
5、检索不同的值(对指定的列做去重操作)
SELECT DISTINCT prod_id FROM products;
DISTINCT关键字必须放在列名的前面。
注意:DISTINCT关键字作用于所有的列。
注意:使用通配符,*表示所有
例如:SELECT * FROM products
表示查询出products表中的所有数据。
6、限制结果(即只查看5条,或10条数据等)
不同的数据库实现查询指定条数的结果数据不同。
1)在SQL SERVER和ACCESS中使用top关键字来限制返回多少行。
例如:
SELECT TOP 5 prod_name FROM products;
2)DB2中使用FETCH FIRST
例如:
SELECT prod_name FROM products FETCH FIRST 5 ROWS ONLY;
3)oracle:需要基于ROWNUM计数器来计算行
SELECT prod_name FROM products WHERE ROWNUM<=5;
4)MySQL、MariaDB、PostgreSQL、SQLite:使用LIMIT关键字限制返回的结果数
SELECT prod_name FROM products LIMIT 10; --返回不超过10行的数据
SELECT prod_name FROM products LIMIT 10 OFFSET 5; --LIMIT后面数值表示限制返回的结果数,OFFSET后面的值表示限制从第几行开始检索。
注意:数据库中使从第0行开始的。
MySQL和MariaDB支持简化版的LIMIT4OFFSET3语句,表示为:LIMIT3,4 逗号之前对应OFFSET的值,逗号之后对应LIMIT的值。
注释:
1)--注释一行后面的内容
2)# 行内注释,注释一整行
3)/* */ 多行注释
第三课:排序检索数据
第五课:高级数据过滤
1、MariaDB支持使用NOT否定IN、BETWEEN、EXISTS子句。 大多数DBMS支持NOT否定任何条件。
第六课:使用通配符过虑:
LIKE操作符
通配符(wildcard)用来匹配值的一部分特殊字符。
搜索模式(search pattern)
由字面值或者两者组合构成的搜索条件。
谓词(predicate),从技术上说,LIKE使谓词而不是操作符。
通配符只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
1)百分号通配符:%
%表示任何字符出现任意次数。
例如:找出所有以fish开通的产品。
SELECT prod_name,prod_price FROM products WHERE prod_name LIKE 'fish%';
说明:
ACCESS数据库中使用*作为通配符而不是%
根据DBMS的不同及其配置,搜索使可以区分大小写的。
可以使用多个通配符:
例如:
SELECT prod_name,prod_price FROM products WHERE prod_name LIKE '%Fish%'; --表示搜索出出现在表中的所有包含Fish字符的行,不管该字符串在它之前或者之后出现。
通配符可以出现在中间:
例如:
SELECT prod_name,prod_price FROM products WHERE prod_name LIKE 'F%y'; --表示查找以F开头y结尾的行。
请注意NULL,在子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。
2)下划线通配符:_
_与%一样,但是_只匹配单个字符而不是多个字符。
DB2通配符不支持下划线(_)
ACCESS通配符需要使用?号而不是_
3)方括号[]通配符
方括号用来匹配指定的一个字符集,它必须匹配指定位置的一个字符。
并不是所有的DBMS都支持创建集合,只有ACCESS和 SQL Server支持集合。