第一章 了解SQL
SQL是结构化查询语言(Structured Query Language)的缩写。
ORM(Object/Relationship Mapping):对象/关系映射
ORM | MySQL |
---|---|
类 | 表 |
一个对象 | 行(表中的一条记录) |
属性(字段) | 列(表中的一个字段) |
属性的类型 | 列的数据类型 |
第二章 MySQL简介
用mysql的简单命令行登录mysql:
mysql -u ben -p123456 -h myserver -P 9999
如果是本地的数据库的话,我习惯上写:
mysql -u root -p123456
注意两点
1. p和密码之间不能有空格
2. 最后不要加分号(;)
第三章 使用MySQL
在写sql时,把MySQL的关键字大写
第四章 检索数据
4.1 SELECT语句
为了使用SELECT检索表数据,必须至少给出两条信息
1. 想选择什么(SELECT prod_name)
2. 从什么地方选择(FROM products)
4.2 检索单个列
sql语句编写习惯:
1. 许多SQL开发人员喜欢对所有SQL关键字使用大写,而对所有列和表名使用小写,这样做使代码更易于阅读和调试。
2. 多数SQL开发人员认为将SQL语句分成多行更容易阅读和调试。
4.3 检索多个列
当心逗号
SELECT prod_id, prod_name, prod_price
FROM products;
4.4 检索所有列
第一个通配符:*(星号)
如果给定一个通配符(*),则返回表中所有列。
SELECT *
FROM products;
4.5 检索不同的行
distinct只返回不同的值。如果使用DISTINCT关键字,它必须直接放在列名的前面。
SELECT DISTINCT vend_id
FROM products;
注意
不能部分使用DISTINCT:DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id, prod_price,除非指定的两个列都不同,否则所有行都将被检索出来。(如果n条记录中这两列的内容是一样的时候,把重复的去掉,只留下一条)
4.6 限制结果
先来看下面几条sql语句和结果
1. 不带LIMIT,使用ORDER BY字句,使得结果可以比较
SELECT prod_name
FROM products
ORDER BY prod_name;
prod_name | 行号 |
---|---|
.5 ton anvil | 0 |
1 ton anvil | 1 |
2 ton anvil | 2 |
Bird seed | 3 |
Carrots | 4 |
Detonator | 5 |
Fuses | 6 |
JetPack 1000 | 7 |
JetPack 2000 | 8 |
Oil can | 9 |
Safe | 10 |
Sling | 11 |
TNT (1 stick) | 12 |
TNT (5 sticks) | 13 |
注意:行0->检索出来的第一行为行0而不是行1,。因此,LIMIT 1,1将检索出第二行而不是第一行。
2. LIMIT 5
SELECT prod_name
FROM products
ORDER BY prod_name
LIMIT 5;
prod_name | 行号 |
---|---|
.5 ton anvil | 0 |
1 ton anvil | 1 |
2 ton anvil | 2 |
Bird seed | 3 |
Carrots | 4 |
3. LIMIT 3, 4指示MySQL返回从行3开始的4行。第一个数为开始位置,第二个数为要检索的行数。
SELECT prod_name
FROM products
ORDER BY prod_name
LIMIT 3,4;
推荐MySQL 5的LIMIT语法:
SELECT prod_name
FROM products
ORDER BY prod_name
LIMIT 4 OFFSET 3;
LIMIT 4 OFFSET 3意为从行3开始取4行。
prod_name | 行号 |
---|---|
Bird seed | 3 |
Carrots | 4 |
Detonator | 5 |
Fuses | 6 |
4.7 使用完全限定的表名
SELECT product.prod_name
FROM crashcourse.products;
product.prod_name:完全限定的列名
crashcourse.products:完全限定的表名
给表起别名的时候会用到,ORM框架也经常用到。