SQL基础
创建表
CREATE TABLE library(
book_id int(11) NOT NULL AUTO_INCREMENT,
book_name varchar(255) NOT NULL
);
ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
修改表的结构
向表中添加字段
ALTER TABLE table_name ADD (column_name int(11));
修改字段名
ALTER TABLE table_name RENAME COLUMN column_name to column_name2;
修改字段数据类型(将column_name 的数据类型设置为float(3,1))
ALTER TABLE table_name MODIFY (column_name float(3,1));
删除字段(删除列column_name2)
ALTER TABLE table_name DROP COLUMN column_name2;
使用 SQL 检索数据
SQL 的执行原理
SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7
SQL数据过滤
SQL中的函数
算术函数
SELECT ABS(-2),运行结果为 2。
SELECT MOD(101,3),运行结果 2。
SELECT ROUND(37.25,1),运行结果 37.3。
字符串函数
SELECT CONCAT('abc', 123),运行结果为 abc123。
SELECT LENGTH('你好'),运行结果为 6。
SELECT CHAR_LENGTH('你好'),运行结果为 2。
SELECT LOWER('ABC'),运行结果为 abc。
SELECT UPPER('abc'),运行结果 ABC。
SELECT REPLACE('fabcd', 'abc', 123),运行结果为 f123d。
SELECT SUBSTRING('fabcd', 1,3),运行结果为 fab。
日期函数
SELECT CURRENT_DATE(),运行结果为 2019-04-03。
SELECT CURRENT_TIME(),运行结果为 21:26:34。
SELECT CURRENT_TIMESTAMP(),运行结果为 2019-04-03 21:26:34。SELECT EXTRACT(YEAR FROM '2019-04-03'),运行结果为 2019。
SELECT DATE('2019-04-01 12:00:05'),运行结果为 2019-04-01。
转换函数
SELECT CAST(123.123 AS INT),运行结果会报错。
SELECT CAST(123.123 AS DECIMAL(8,2)),运行结果为 123.12。
SELECT COALESCE(null,1,2),运行结果为 1。
SQL中的聚集函数
SQL视图
创建视图
CREATE VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition
修改视图
ALTER VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition
删除视图
DROP VIEW view_name
SQL子查询
SQL进阶
绑定变量
SQL> select * from player where player_id = :player_id;
在第一次查询之后,在共享池中就会存在这类查询的执行计划,也就是软解析。
让 MySQL 收集在 SQL 执行时所使用的资源情况:
mysql> select @@profiling;
获取上一次查询的执行时间
mysql> show profile;
获取指定的 Query ID的查询的执行时间
mysql> show profile for query 2;
查看 MySQL 的版本情况
mysql> select version();
SQL事务处理
连接(JOIN)
Navicat
要能够熟练的使用Navicat。
DDL
SQL存储过程
定义存储过程
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
需要执行的语句
END
DELIMITER 的作用
DELIMITER //
CREATE PROCEDURE `add_num`(IN n INT)
BEGIN
DECLARE i INT;
DECLARE sum INT;
SET i = 1;
SET sum = 0;
WHILE i <= n DO
SET sum = sum + i;
SET i = i +1;
END WHILE;
SELECT sum;
END //
DELIMITER ;
SQL游标
.sql 文件
需要注意:
关于别名:
如果我们使用了表的别名,在查询字段中就只能使用别名进行代替,不能使用原有的表名,否则 SQL 查询就会报错。