SQL常用语句(单表操作)
1.SQL概述
SQL(Structured Query Language)结构化查询语言 : 结构化查询语言是一种特定目的编程语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
ps:就是对数据库操作的语言.
https://zh.wikipedia.org/zh-cn/SQL
2.SQL常用语句
2.1 SQL语句分类
1.DDL(Data Definition Language)数据定义语言定义(创建) 数据库,数据表及其结构
2.DML(Data Manipulation Language)数据操作语言新增,修改,删除,查询 数据. (java开发工程师数据库操作语言)
3.DQL(Data Query Language)数据查询语言(民间称呼)查询数据. (java开发工程师面试中数据库考题)
4.DCL(Data Control Language)数据控制语言创建账号,并授予访问权限.
5.TCL(Transaction Control Language)事务控制语言事务处理的管理.
2.2 注释语句
单行注释: --空格 需要注释的语句
多行注释: /* 需要注释的语句 */
2.3 登陆连接
SQLyog:图形化操作
CMD命令行: mysql -uroot -p (已配置环境变量)
3.DLL操作语句
3.1 DLL数据库操作语句(CRUD)
- 数据库操作
CREATE DATABASE IF NOT EXISTS day01d; --如果不存在创建数据库
SHOW DATABASES; --查询数据库
SHOW CREATE DATABASE day01d;-- 展示数据库day01d创建语句
ALTER DATABASE CHARACTER SET gbk;-- 修改数据库
DROP DATABASE IF EXISTS day01d;-- 删除数据库
USE day01;-- 使用库
SELECT DATABASE();-- 查看当前使用的数据库
3.2 DDL操作数据表
- 创建表
CREATE TABLE stu01(
id INT DEFAULT 0 COMMENT "记录唯一标识id",
uname VARCHAR(8) DEFAULT NULL COMMENT "用户姓名",
usex CHAR(1) DEFAULT "男" COMMENT "用户性别",
ubirthday DATETIME DEFAULT NULL COMMENT "出生日期",
updatetime TIMESTAMP NOT NULL COMMENT "记录修改时间"
);
- 复制表
CREATE TABLE stu03 LIKE stu02;-- 复制表的目录结构
- 查看表
SHOW TABLES;--查看创建的所有表
SHOW CREATE TABLE stu02;-- 查看stu02的创建语句
DESC stu07;--查询表结构
- 修改表
ALTER TABLE stu02 ADD ssex CHAR(1) DEFAULT "男" COMMENT "性别";-- 添加一列
ALTER TABLE stu02 MODIFY ssex VARCHAR(10);--修改列类型
ALTER TABLE stu02 CHANGE ssex sgender CHAR(2);--修改列名
ALTER TABLE stu02 DROP insert_time; -- 删除列
ALTER TABLE stu02 CHARACTER SET gbk;-- 修改字符编码
RENAME TABLE stu02 TO stu002;-- 修改表名
DROP TABLE IF EXISTS stu002;-- 删除表
4.DML增删改操作语句
4.1 DML操作表中的数据
- 添加数据
INSERT INTO stu02(id,NAME,age) VALUE (1,"张无忌",18);-- 向表中添加一行数据
INSERT INTO stu02 VALUES(2,"赵敏",17,99.9,NULL,NULL);-- 默认向表中添加一行数据
- 删除数据
DELETE FROM stu02 WHERE id=1; -- 逐行删除数据
TRUNCATE TABLE stu02; -- 格式化数据后复制表头
- 修改数据
UPDATE stu01 SET uname="mack"; -- 将stu02表中uname值改为mack
UPDATE stu02 SET age= 17 WHERE id=2; -- 将stu02中id=2的age改为17
- 查询数据
SELECT * FROM stu02; -- 查看表的所有数据
-
蠕虫复制
INSERT INTO student2 SELECT * FROM stu01; -- 将表stu01的数据复制到student2中
5. DQL数据库查询语言
5.1 DQL简单查询
-
简单查询
SELECT * FROM student2; -- 查询表student2中的所有数据 SELECT uname,usex FROM student2; -- 查询表student2中的uname,usex字段 SELECT uname AS n,usex AS g FROM student2; -- 别名查询uname字段别名为n进行查询(多用于多表查询) SELECT uname,usex,ubirthday FROM student2 AS s; -- 表student2的别名为s进行查询(用于多表查询) SELECT DISTINCT uname,usex FROM student2; -- 重复值多个字段比较
5.2 DQL语句增强
-
条件查询
SELECT * FROM student2 WHERE uname="jack01"; -- 查询uname字段为"jack01"的行 SELECT * FROM student2 WHERE uname = "jack" AND usex = "女"; -- 查询表student2中uname和usex字段同时为要求的值 SELECT * FROM student2 WHERE uname = "jack" OR usex = "女"; -- 查询表student2中uname="jack"或者usex="女"的值; SELECT * FROM student2 WHERE uname IN("jack01","rose"); -- 查询表student2中uname为"jack01","rose"的数据行 SELECT * FROM student2 WHERE uname NOT IN("jack01","rose"); -- 查询表student2中uname不为"jack01","rose"的数据行 SELECT * FROM student2 WHERE score BETWEEN 30 AND 50; -- 查询score字段的值为30到50之间的数据行
-
模糊查询
SELECT * FROM student2 WHERE uname LIKE "jack%"; -- 模糊查询jack后包含的任意字段 % 通配符代表0个或者多个字符 SELECT * FROM student2 WHERE uname LIKE "%ck%"; -- 查询student2中uname字段包含ck的值 SELECT * FROM student2 WHERE uname LIKE "_邦%";-- 匹配uname字段中包含邦的字段 _ 通配符代表任意的一个字符
-
排序
SELECT * FROM student2 ORDER BY score DESC; -- 按照score降序进行排列数据 SELECT * FROM student2 ORDER BY score; -- 默认按照score升序进行排列 SELECT * FROM student2 ORDER BY score ,math ASC; -- score字段进行升序排列后,对score相同的值进行升序排列;
-
聚合函数
SELECT COUNT(english) FROM student3; -- 查询english学生总数不统计值为null的值 SELECT COUNT(IFNULL(english,0)) FROM student3; -- 统计english字段总数 如果english为null则用0代替 SELECT COUNT(*) FROM student3; -- 查询表中有多少行数据 SELECT COUNT(*) FROM student3 WHERE age>40;-- 查询表中有多少age>40的数据行 SELECT SUM(math) FROM student3; -- 查询数学成绩总和 SELECT AVG(math) FROM student3;-- 查询数学成绩平均值 SELECT MAX(math) FROM student3;-- 查询数学成绩最大值 SELECT MIN(math) FROM student3;-- 查询数学成绩最小值
-
分组
SELECT * FROM student2 GROUP BY usex; -- 将分组字段结果中相同内容作为一组 SELECT usex,SUM(score) FROM student2 GROUP BY usex; -- 按照分组结果进行聚合函数求和计算然后返回结果 SELECT usex,COUNT(*) FROM student2 WHERE age>25 GROUP BY usex; -- 查询年龄大于25岁的人,按性别分组,统计每组的人数 SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2; -- 只有分组后人数大于2的`男`这组数据显示出来
-
其它
SELECT * FROM student3 LIMIT 2,6; -- 我们可以认为跳过前面2条,取6条数据
-
查询顺序
select distinct *或者字段或者聚合 from 表名 where 条件 and 条件 或 btween 条件 或 or 条件 或 in 条件 group by 字段 having 条件 order by 字段 asc/desc limit a,b