参考资料:
[1]. 菜鸟教程-MySQL 教程
[2]. 正确理解MySQL中的where和having的区别
DB:数据库,存储数据。
DBMS:Management System,数据库是通过DBMS创建的。常见DBMS有MYSQL,Oracle,DB2,SqlServer。
SQL:结构化查询语言。
语法
创建数据库:CREATE DATABASE 数据库名;
删除数据库:DROP DATABASE <数据库名>;
选择数据库:use DATABASE
创建数据表:CREATE TABLE table_name (column_name column_type);
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除数据表:DROP TABLE table_name ;
(可以跟删除数据库进行对比)
插入数据:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
查询数据:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
LIMIT表示返回的条数
OFFSET表示偏移
WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
更新数据:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
删除数据:DELETE FROM table_name [WHERE Clause]
模糊查询:field LIKE '模糊条件'
%a
表示以a结尾
_a
表示两个字符,以a结尾
合并多个查询:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
分组:
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例子:SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
一般会搭配聚合函数一起使用,然后返回聚合的列和聚合函数的结果,返回的其他列是聚合后的第一个。
连接:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
例子:
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
相当于
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
正则表达式
以aeiou开头或者以ok结尾
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
ALTER
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。
索引
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
CREATE INDEX indexName ON mytable(username(length));
ALTER table tableName ADD INDEX indexName(columnName)
例子:
create index idx_user_name on user(name);
HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
WHERE VS HAVING
“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
“HAVING”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
例子可以参见[2]
网友评论