MySQL的DDL、DML和DQL的基本语法

定义: 

        SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一 种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名

SQL语句分类

 一、DDL

1、显示所有库
SHOW DATABASES;  

2、创建一个库    CREATE DATABASE 库名;库只能被创建一次 

3、删除一个库  DROP DATABASE 库名;

4、使用库    USE 库名;

5、改变字段属性
-- ALTER TABLE 表名 MODIFY 字段名 属性 

ALTER TABLE teacher MODIFY money DECIMAL(11,2); 

6、修改字段名
-- ALTER TABLE 表名 CHANGE 字段名 新字段名 属性
ALTER TABLE student CHANGE birthday shengri DATE; 

7、添加字段
-- ALTER TABLE 表名 ADD 字段名 属性
ALTER TABLE teacher ADD address VARCHAR(30) DEFAULT '陕西'; 

8、删除字段
-- ALTER TABLE 表名 DROP 字段名; 

删除一个字段
ALTER TABLE teacher DROP telephone;

9、修改表名
-- ALTER table 表名 RENAME AS 新表名; 

二、DML 

1、新增
INSERT INTO 表名 (字段名1,字段名2……)VALUES(值1,值2……); 

&---        INSERT INTO teacher(name,sex,birthday,money,cid)VALUES

('王老大','男','2001-02-02',10000.00,001),('杨老二','男','2003-03-03',88888.00,002);

2、修改
UPDATE 表名 SET 字段名=值,字段名=值 WHERE [子句] 

&---         UPDATE student SET name = '杰克逊' WHERE birthday = '2004-04-09'; 

&---        在一定范围内写修改语句
UPDATE student SET ssex='女' ,classid = 9 WHERE Sid>= 9 AND Sid <=13; 
&---         等价语句    小数据在前,大数据在后
UPDATE student SET ssex='男' ,classid = 9 WHERE Sid BETWEEN 9 AND 13; 

3、删除
&---       delete from teacher WHERE name ='周老十';  

DELETE FROM student WHERE birthday = '1990-10-01';

三、DQL 

1、SELECT * FROM student;-- (全查)
2、SELECT * FROM student WHERE classid = 1;-- (查找classid是1的人员) 

3、-- 根据选择字段查询
SELECT sname,ssex FROM student; 

4、-- 给字段起别名(3种方式——    as\''\直接放别名)
-- 一旦起别名了,字段名就是别名
SELECT sname AS '姓名',birthday '生日',ssex 性别 FROM student; 

5、-- DISTINCT 去除重复(字段中完全相同的去掉)
SELECT DISTINCT Ssex FROM student;
SELECT DISTINCT ssex,classid FROM student; 

6、-- 带条件的查询语句 WHERE
SELECT * FROM student WHERE ssex = '男';
SELECT * FROM student WHERE ssex = '男' AND classid = 1; 

7、-- 生日大于1991.01.01的学生
SELECT * FROM student WHERE birthday < '1991-01-01'; 

8、模糊查询    LIKE 

8.1        -- 模糊符号        %    任意多的任意字符
SELECT * FROM student WHERE Sname LIKE '%猴%';

8.2        -- 后模糊    xx%,结果是以xx开头的数据
SELECT * FROM student WHERE Sname LIKE '猴%';

8.3        -- 前模糊 %xx,结果是以xx结尾的数据
SELECT * FROM student WHERE Sname LIKE '%猴';

9、-- IN 在哪个范围内 

SELECT * FROM student WHERE Sid IN(2,5,6,7,8,15); 

10、-- 没有生日的学生    关键词 IS,不能是null
SELECT * FROM student WHERE birthday IS NULL;
SELECT * FROM student WHERE birthday IS NOT NULL; 

 11、聚合函数 

count(字段)    统计个数,COUNT 不统计null 

-- 统计表里一共有多少学生
SELECT COUNT(*) FROM student; 

-- 统计表里一共有多少女同学
SELECT COUNT(*) FROM student WHERE Ssex = '女';
-- 可以使用常量去统计
SELECT COUNT(1) FROM student WHERE Ssex = '女';
SELECT COUNT('aaa') FROM student WHERE Ssex = '女';
-- 可以使用主键统计
SELECT COUNT(Sid) FROM student WHERE Ssex = '女'; 

 avg (平均分)

-- 统计所有学生的平均分
SELECT AVG(score) FROM sc; 

sum(总数) 

-- 所有学生的总成绩
SELECT SUM(score) FROM sc; 

max(最高分) 

-- 最高成绩
SELECT MAX(score) FROM sc; 

min(最低分) 

-- 最低成绩
SELECT MIN(Score) FROM sc; 

 12、分组 

-- 按照性别分组,男有多少,女有多少
SELECT ssex, COUNT(*) FROM student GROUP BY Ssex; 

-- 每个班有多少学生
SELECT classid,COUNT(*)FROM student GROUP BY classid; 

-- 总成绩
SELECT Sid,SUM(score) 总分 FROM sc GROUP BY Sid;

-- 分类合计
SELECT Sid,SUM(score) 总分 ,AVG(score) 平均分,MAX(Score) 最高分,MIN(Score) 最低分,COUNT(Score) 次数 FROM sc GROUP BY Sid; 

 13、 HAVING 数据聚合之后的分组;HAVING 不能单独出现,必须要和 GROUP BY 一起出现
-- 平均分大于80分的
SELECT sid,AVG(score) FROM sc GROUP BY Sid
HAVING AVG(Score)>80;
 14、排序 ORDER BY        升序asc\降序desc 

-- 成绩降序(由高到低)
SELECT * FROM sc ORDER BY Score DESC; 15、LIMIT 做分页 

 分页公式     (页码——1)*步长,步长,写的是确定值,不是表达式

SELECT * FROM student LIMIT 4,4; 

16、多表联查

-- 非等值联查    迪卡尔积(两个集合相乘的结果) from之后多张表表名
SELECT * FROM student,class; 

 -- 内联查询
SELECT * FROM student INNER JOIN class ON student.classid=class.classid;

-- 1、先执行虚拟表,第一张的查询结果,作为最大的基础数据表;2、链接class表,复制了之前虚拟表的,进行条件判断拼数据。虚拟表最大结果集是最大表的个数。
-- 2、等值查询,内联查询的选择场景使用。表的数量多、字段名较多。数据量小,表非常多的时候使用等值联查。 

内联多张表
-- 查询上过李四老师课程的学生;where写条件 

SELECT student.* FROM student  INNER JOIN sc ON  student.Sid=sc.Sid  INNER JOIN course ON  sc.Cid=course.Cid  INNER JOIN teacher ON  course.Tid=teacher.Tid  WHERE Tname='李四'; 

-- 外联查询    做外联查询,主要查询什么。主表在join的左边,称之为左外联。右外联亦是如此。 

-- LEFT JOIN 左外联 主表是student
SELECT * FROM student LEFT JOIN class ON student.classid=class.classid; 

-- RIGHT JOIN 右外联 主表是class
SELECT * FROM student RIGHT JOIN class ON student.classid=class.classid ORDER BY Sid; 

 UNION    上下两个结果并成一个虚拟表;union和数据类型无关;union并列的时候,上下两个表之间的字段名数量要一致;union去重复

SELECT * FROM student LEFT JOIN class ON student.classid=class.classid WHERE class.classid=NULL
UNION
SELECT * FROM student RIGHT JOIN class ON student.classid=class.classid WHERE student.Sid=NULL;

 17、WHERE 子查询 

使用where子查询实现 -- 子查询必须要有小括号;结果以主句为主,副句是条件。 

 查询id最大的一个学生

SELECT * FROM student WHERE Sid=(SELECT MAX(Sid) FROM student);

 18、FROM 子查询 

查询大于3人的班级名称和人数

SELECT classname,a 人数 FROM class LEFT JOIN
(SELECT classid,COUNT(*) a FROM student GROUP BY classid) t1 
ON class.classid=t1.classid WHERE a > 3;
 19、控制sql语句 

IF(expr1,case,expr3)

SELECT tid,tname,IF(tsex=1,'男','女'),tbirthday FROM teacher;

 

case、when、then、end语句 

-- 第一种,简单case(常量)

SELECT tname,tbirthday,
    CASE tsex
    WHEN 1 THEN '男'
    WHEN 0 THEN '女'
    END 性别,
taddress FROM teacher;

 -- 第二种,搜索case 

查询学生的成绩,
-- 并将大于90分的用A显示,
-- 大于80分的用B显示,
-- 大于70分的用C显示,
-- 大于60分的用D显示,
-- 小于60分的显示不及格 

------------------------------------------------语法------------------------------------------ 

SELECT sname,cname,
    CASE
    WHEN score>=90 THEN 'A'
    WHEN score>=80 AND score <90 THEN 'B'
    WHEN score>=70 AND score <80 THEN 'C'
    WHEN score>=60 AND score <70 THEN 'D'
    WHEN score<60 THEN '不及格'
END 成绩评分
FROM student LEFT JOIN sc on student.sid=sc.sid
LEFT JOIN course ON sc.Cid = course.Cid ORDER BY 成绩评分; 

 

以上便是MySQL中DDL、DML、DQL的使用和实例解析,牢记“增删改查”。 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值