SQL语句是以分号结尾
MySQL注释:(1)#开头 (2)--空格 开头 (3)/* 多行注释 */
DDL操作数据库
show databases; 显示当前mysql中的数据库
create database db_user; 创建新的数据库
show create database db_user; 查看数据库的定义信息
alter database db_user character set utf8; 修改数据库的字符集
drop database db_user; 删除数据库
select database(); 查看当前使用的数据库 如果没有使用返回null
use db_user2; 切换 使用数据库
quit;或者exit; 退出数据库;
DDL操作表
CREATE TABLE语句用于创建新表。
语法:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束,
...
字段n 字段类型(长度) 约束
) [charset=utf8];
DROP TABLE语句用于删除现有表。
语法: DROP TABLE [IF EXISTS] table_name
当前数据库中的所有表
SHOW TABLES;
查看表的字段信息
DESC student;
在上面学生表的基础上增加一个image列。
ALTER TABLE student ADD image blob;
修改address列,使其长度为60。
ALTER TABLE student MODIFY address varchar(60);
删除image列,一次只能删一列。
ALTER TABLE student DROP image;
表名改为user。
RENAME TABLE student TO user;
查看表的创建细节
SHOW CREATE TABLE user;
修改表的字符集为gbk
ALTER TABLE user CHARACTER SET gbk;
列名name修改为username
ALTER TABLE user CHANGE name username varchar(100);
DML操作(增删改)
(1)插入操作:INSERT:
语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
注意:列名与列值的类型、个数、顺序要一一对应。
可以把列名当做java中的形参,把列值当做实参。
参数不要超出列定义的长度。
如果插入空值,请使用null
插入的日期和字符一样,都使用单引号括起来。
(2)修改操作:UPDATE:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
(3)删除操作:DELETE
语法 : DELETE FROM 表名 【WHERE 列名=值】
DQL数据查询(重点)
查询关键字:SELECT
语法: SELECT 列名 FROM 表名 【WHERE --> GROUP BY-->HAVING--> ORDER BY-->LIMIT】
SELECT selection_list /要查询的列名称/
FROM table_list /要查询的表名称/
WHERE condition /行条件/
GROUP BY grouping_columns /对结果分组/
HAVING condition /分组后的行条件/
ORDER BY sorting_columns /对结果排序/
LIMIT offset_start, row_count /结果限定/
查询学号为S _ 1001 ,S _ 1002,S _ 1003的记录
SELECT * FROM stu
WHERE sid IN ('S_1001','S_1002','S_1003');
等同于
SELECT * FROM stu
WHERE sid='S_1001' or sid='S_1002' or sid='S_1003';
模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:
_ 任意一个字符
%:任意0~n个字符
字段控制查询
去除重复记录 SELECT DISTINCT sal FROM emp;
和运算 select *,concat(ename,'______',job) from emp;
SELECT *,sal+IFNULL(comm,0) FROM emp;
排序
order by 字段 desc(asc),字段desc(asc)
聚合函数
聚合函数是用来做纵向运算的函数:
l COUNT():统计指定列不为NULL的记录行数;
l MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
l MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
l SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
l AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询
group by 字段
HAVING子句
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
where是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而 having是对分组后数据的约束。
LIMIT限制
limit 起始行,这一页的总行数
总结查询
查询语句书写顺序:select 列 from 表 【where- group by- having- order by-limit】
where是对原始数据做筛选
group by 把数据进行分子
having 分组后的筛选
order by 排序
limit 限制
having 必须放在group by的后面
查询语句执行顺序:from 表 where -group by -having - select - order by-limit