关于大小写:
SQL语句不区分大小写。SELECT、select 、Select都是可以的。
许多SQL开发人员喜欢对所有SQL关键字使用大写,对所有表名和列使用小写,这样使代码更加易于阅读和调试。
关于空格:
SQL语句中,所有空格都会被忽略。
SQL语句可以在一行给出,也可以分成多行,
多数SQL开发人员将SQL语句分成多行,这样使代码更容易阅读和调试。
USE 数据库名
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM 表名; 或者 DESCRIBE 表名;
SHOW CREATE DATABASE 数据库名;
SHOW CREATE TABLE 表名;
SHOW STATUS;
SHOW ERRORS;
SHOW WARNINGS;
SELECT prod_name FROM products;
SELECT prod_id,prod_name,prod_price FROM products;
SELECT * FROM products;
SELECT DISTINCT vend_id FROM products;
SELECT prod_name FROM products LIMIT 5;
SELECT prod_name FROM products LIMIT 5,5;//从第5行开始的5行(第5,6,7,8,9行)
SELECT prod_name FROM products LIMIT 2,3;//从第2行开始的3行(第2,3,4行)
SELECT prod_name FROM products LIMIT 3 OFFSET 2 ;//从第2行开始的3行(第2,3,4行)
SELECT products.prod_name FROM products;
SELECT host,user,password FROM mysql.user;
关于通配符:
通配符*
关于DISTINCT:
关键字DISTINCT 必须放在列名前面;
不能部分使用DISTINCT,DISTINCT关键字应用于所有列,而不仅仅是前置它的列。
每列值完全相同才会被过滤,比如,
SELECT DISTINCT vend_id,prod_price FROM products;除非vend_id,prod_price都不同,否则所有行都会被检索出来。
比如表 products中 如下两行:
vend_id prod_price
xxx1 yyy2 第0行,用a标识
xxx2 yyy2 第1行,用b标识
SELECT DISTINCT vend_id,prod_price FROM products;
如果a.vend_id == b.vend_id && a.prod_price == b.prod_price
即 xxx1 == xxx2 && yyy1 == yyy2;
那么DISTINCT vend_id ,prod_price后,第0行的将被检索出来,第1行的将不被检索出来。
关于LIMIT X,Y 或者 LIMIT Y OFFSET X:
SELECT prod_name FROM products;
搜索结果如下:
prod_name
xxx1 第0行
xxx2 第1行
xxx3 第2行
xxx4 第3行
xxx5 第4行
xxx6 第5行
xxx7 第6行
xxx8 第7行
SELECT prod_name FROM products LIMIT 2,3;
搜索结果是:从第2行开始的3行,即第2,3,4行
prod_name
xxx3
xxx4
xxx5
关于完全限定名:
可完全限定 表名、列名
SHOW DATABASES;
USE information_schema;
SELECT host,user,password FROM user;
ERROR 1109(42S02):Unknown table 'user' in information_schema
SELECT host,user,password FROM mysql.user;
关于自动增量:
某些表列需要唯一值;
每往表中添加一行,AUTO_INCREMENT 就会自动为每行分配一个可用的唯一的编号,而不需要一个个手动分配唯一编号;
如果某列指定为AUTO_INCREMENT,此时,在INSERT语句中指定值,该值唯一,那么该值会替代自动生成的值,且后续增增量会开始使用这个手动插入的值;
获取AUTO_INCREMENT的值:SELECT last_insert_id();
一张表中只允许一个AUTO_INCREMENT 列,且必须被索引(比如指定为主键)