1
表(table):某种特定类型数据的结构化清单。
列(column):表中的一个字段。所有表都是有一个或多个列组成。
数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
行(row):表中的一个记录。
主键(primary key):一列(或一组列),其值能够唯一区分表中的每个行。
主键应该满足如下条件:
- 任意两行都不具有相同的主键值
- 每个行都必须具有一个主键值(主键列不允许NULL值)
2
MySQL是一种DBMS(数据库管理系统),即它是一种数据库软件。
SQL语句不区分大小写。SQL关键字使用大写,对所有表名和列名使用小写,有利于阅读和调试。
3
关键字(keyword):作为MySQL语言组成部分的一个保留字。绝不要用关键字命名一个表或列。
show databases;
查看已有数据库。
use mysqlcc;
使用use打开名为mysqlcc的数据库(读取数据前必做项)。
show tables;
查看对应数据库中已有的表。
show columns from customers;(等价于 describe customers;)
查看customers表中的字段信息,包括字段名、数据类型、是否允许NULL、键信息、默认值、和其他(如自动增量等)。
4检索数据
1、select语句
至少包含两条信息:想选择什么,从什么地方选择。
2、检索单个列
select prod_name from products;
返回未排序数据。
3、检索多个列
select pro_id,prod_name,pro_price
from products;
检索多个列时用逗号隔开,最后一列后面不要加。(SQL语句可以在一行上给出,也可以分行写,分行利于阅读和调试)。
4、检索多有列
select * from products;
当有名字未知的列时,可以使用通配符 * 来检索。
5、检索不同的行
select distinct ven_id from products;
由检索单个列可知返回的是该列的所有行,会有重复,使用distinct关键字来避免重复。
6、限制结果
select prod_name from products limit 5;
返回prod_name列的前5行。
select prod_name from products limit 5,5;
返回prod_name列的下一个5行。第一个数是开始的位置,第二个数是检索的行数。
7、使用完全限定的表名或列名
select products.prod_name from products;
select products.prod_name from mysqlcc.products;
5排序检索数据
1、排序数据
关系数据库设计理论认为,如果不明确规定排序顺序,则不应该认为检索出的顺序有意义。
使用自居order by 来完成排序,如:
select prod_name from products order by prod_name;
上述为 select A from products order by A; 也可以 select A from products order by B; 即通过非选择列进行排序。
2、按多个列排序
select prod_id,prod_price,prod_name
from products
order by prod_price,prod_name;
检索3列,并按其中两列排序,首先按价格,然后按名称。
3、指定排序方向
select prod_id,prod_price,prod_name
from products
order by prod_price DESC,prod_name;
首先以降序排序产品价格,然后升序排序产品名。(默认升序)
6过滤数据
1、使用where子句
select prod_name,prod_price
from products
where prod_price=2.50;
检索两列,但只返回prod_price值为2.50的行。(同时使用order by和where子句时,order by应位于where之后)
2、where子句操作符:=、<>、!=、<、>、<=、>=、BETWEEN。
2.1检查单个值
select prod_name,prod_price
from products
where prod_name="fuses";
MySQL执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
2.2不匹配检查
select prod_name,prod_price
from products
where prod_name<>"fuses";
<>、!=,两个都是不等于操作符。
2.3范围值检查
select prod_name,prod_price
from products
where prod_price BETWEEN 5 AND 10;
2.4空值检查
select prod_name
from products
where prod_price IS NULL;
7数据过滤
1、组合where子句
可以用包含任意多 的AND和OR操作符的where子句来进行高级过滤。
select prod_name,prod_price
from products
where vend_id=1002 OR vend_id=1003 AND prod_price >=10;
注意:AND在计算次序中比OR高,所以上述SQL语句等价于
select prod_name,prod_price
from products
where (vend_id=1002) OR (vend_id=1003 AND prod_price >=10);
任何时候使用AND和OR操作符的where语句时,都应该使用圆括号明确地分组操作符,不要过分依赖默认计算次序。
2、IN操作符
select prod_name,prod_price
from products
where vend_id IN(1002,1003) //此行等价于where vend_id=1002 OR vend_id=1003
order by prod_name;
功能与OR相同, 推荐使用IN。
3、NOT操作符
select prod_name,prod_price
from products
where vend_id NOT IN(1002,1003) //列出除1002和1003之外的所有供应商制造的产品。
order by prod_name;
MySQL支持使用NOT对IN、BETWEEN、和EXISTS子句取反。
8用通配符过滤
1、LIKE操作符
1.1百分号(%)通配符
通配符使用较灵活,如:%et,%et%。注意尾空格可能会干扰匹配:'%anvil' 不会匹配 '%anvil '。
'%'不匹配NULL。
1.2下划线(_)通配符
总是匹配1个字符。
2、使用技巧
- 不要过度使用通配符,要比其他操作符花的时间长
- 除非有必要,否则不要把他们放在搜索模式开始处