MySql语法简单总结

1 篇文章 0 订阅
1 篇文章 0 订阅

一、背景:

最近经历了一次跳槽,在找工作的过程中,我发现笔试题中除了考java相关的知识点,还会考数据库相关的知识点,如果基本的知识点不过关,那么整个面试过程会很被鄙视,sql如果长久不用,或者不总结又容易遗忘,所以我写下这篇文章,希望对数据库相关的知识点做一个梳理总结,以备不时之需

MySql中语句的执行顺序

  1. from  
  2. on  
  3. join  
  4. where  
  5. group by  
  6. having  
  7. select  
  8. distinct  
  9. union  
  10. order by  

注意: from后面的表关联,是自右向左解析的,而where条件的解析顺序是自下而上的,也就是说,在写SQL的时候,尽量把数据量小的表放在最右边来进行关联(用小表去匹配大表),而把能筛选出小数据量的条件 放在where语句的最左边,使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。 

二、本次学习中所需的建表语句

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `DEPTNO` int(2) NOT NULL,
  `DNAME` varchar(14) DEFAULT NULL,
  `LOC` varchar(13) DEFAULT NULL,
  PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');

-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `EMPNO` int(4) NOT NULL,
  `ENAME` varchar(10) DEFAULT NULL,
  `JOB` varchar(9) DEFAULT NULL,
  `MGR` int(4) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` int(7) DEFAULT NULL,
  `COMM` int(7) DEFAULT NULL,
  `DEPTNO` int(2) DEFAULT NULL,
  PRIMARY KEY (`EMPNO`),
  KEY `FK_DEPTNO` (`DEPTNO`),
  CONSTRAINT `FK_DEPTNO` FOREIGN KEY (`DEPTNO`) REFERENCES `dept` (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

三、单表操作

-- 将多列值作为一列返回
SELECT concat(ename,' works AS A ', job) AS msg FROM emp WHERE DEPTNO = 10;

--  在select语句中使用条件逻辑
SELECT ename,sal, CASE WHEN sal <= 2000 THEN 'UNDERPAID'
WHEN sal >= 4000 THEN 'OVERPAID' ELSE 'OK' END AS STATUS
FROM emp;

-- 查找空值
SELECT * from emp where COMM is null;

-- 将空值准换为实际值
SELECT COALESCE(comm,0) FROM emp;
SELECT (CASE WHEN comm is null then 0 else comm end) my_comm FROM emp;  

-- 按模式搜索
SELECT ename,job from emp where DEPTNO in (10,20)
-- 返回名字中有"I"或职务中带有"ER"的员工 
-- 百分号%可以匹配任何字符串序列,下划线_则匹配单个字符,"%I%",表示不管I在什么位置,只要存在就会返回,%在前,
-- 表示返回以I结尾的字符串,反之则是以I开头的字符串
SELECT ename,job FROM emp WHERE DEPTNO in(10,20) and (ename LIKE '%I%' OR JOB LIKE '%ER')

-- 排序,ORDER BY中优先次序是从左到右,一般情况下都可以按照select列表中没有的列来排序,
-- 但是必须显示地给出排序的列名,如果在查询中使用了group BY或distinct,则不能按照select列表中灭有的列来排序
SELECT EMPNO,DEPTNO,SAL,ENAME,JOB FROM emp ORDER BY DEPTNO,SAL DESC

-- 按子串排序,按照职位字段的最后两个字符排序
SELECT ename,job FROM emp ORDER BY substr(job,LENGTH(job)-2)  

--  根据数据项的键排序  
SELECT ename,sal,job,comm FROM emp ORDER BY CASE WHEN job = 'salesman' THEN comm else sal END

四、多表操作

-- 记录集的叠加,union all 将多个来源组合起来,放到一个结果集中,所有select列表中项目数和对
-- 应的项目的数据类型必须要匹配,UNION ALL将包含重复的项目,而union可去掉重复项,但是为了去重而进行排序操作,在处理大结果集时不要用union
SELECT ename AS ename_and_dname,deptno FROM emp WHERE DEPTNO = 10 UNION  ALL
SELECT '----------',NULL FROM sc UNION ALL SELECT dname,deptno 
FROM dept

-- 两表中查找共同的行
CREATE view v  AS SELECT e.empno,e.ename,e.job,e.sal,e.deptno FROM emp e;
SELECT deptno FROM dept WHERE in (50,10,null)

SELECT job,COUNT(hiredate) FROM emp GROUP BY job ORDER BY hiredate

 

五、对group by 和 having 的理解

group by 对数据进行分组; having 对已经分组的数据进行过滤的条件; 

select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a 

group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。

使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式 

需要注意having和where的用法区别: 

1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。 

2.where肯定在group by 之前,即也在having之前。 

3.where后的条件表达式里不允许使用聚合函数,而having可以。 

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是: 

1.执行where xx对全表数据做筛选,返回第1个结果集。 

2.针对第1个结果集使用group by分组,返回第2个结果集。 

4.针对第2个结集执行having xx进行筛选,返回第3个结果集。

3.针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。 

 5.针对第4个结果集排序。 

六、总结

这次只是做了一个简单的MySQL基础知识点的复习,肯定还有很多知识点没有提到的,后续我会继续学习和总结这方面的知识点,学习就是一个不断积累的过程.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 最简单MySQL语句是: ``` SELECT * FROM table_name; ``` 这个语句会从表 `table_name` 中选择并返回所有的数据。 ### 回答2: MySQL简单的语句是SELECT语句。SELECT语句用于从数据库表中选择特定的列、行和数据,用于检索数据。它的基本语法如下: SELECT 列名 FROM 表名; 其中,列名是指我们希望从数据库表中选择的列,可以是一个或多个列名,多个列名之间使用逗号分隔;表名是指我们想要查询的表,可以是一个或多个表名,多个表名之间使用逗号分隔。 例如,如果有一个名为students的表,有列名id、name和age,我们可以使用SELECT语句查询该表中所有学生的id和name信息,语句如下: SELECT id, name FROM students; 执行上述语句后,MySQL会返回students表中所有学生的id和name信息。 此外,我们还可以使用WHERE子句来进一步筛选数据,例如查询年龄大于20岁的学生信息: SELECT id, name FROM students WHERE age > 20; 上述语句会返回students表中年龄大于20岁的学生的id和name信息。 通过这种最简单的SELECT语句,我们可以轻松地从MySQL数据库中检索所需的数据,并对数据进行筛选和过滤,满足我们的需求。 ### 回答3: MySQL简单的语句是SELECT语句。它用于从数据库表中检索数据。 基本的SELECT语句语法是: SELECT 列名 FROM 表名; 例如,如果我们有一个名为“students”的表,其中包含id、name和age列,我们可以使用以下语句来检索所有学生的姓名: SELECT name FROM students; 这将返回一个结果集,其中包含所有学生的姓名。 我们还可以使用WHERE子句在SELECT语句中添加条件。例如,如果我们只想检索年龄大于18岁的学生姓名,我们可以使用以下语句: SELECT name FROM students WHERE age > 18; 除了SELECT语句,还有其他一些简单MySQL语句。例如,INSERT语句用于将新记录插入到表中,UPDATE语句用于更新现有记录,DELETE语句用于删除记录。 总结起来,MySQL简单的语句是SELECT语句,可以用于从表中检索数据。根据需要,我们可以添加条件和使用其他语句来操作表中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值