mysql SQL必知语法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操

概要

mysql SQL必知语法


SQL必知语法包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等关键字,用于查询和操作数据库中的数据。SELECT用于选择需要查询的列,FROM用于指定数据表,WHERE用于设置查询条件,GROUP BY用于对结果进行分组,HAVING用于对分组结果进行过滤,ORDER BY用于对结果进行排序。熟练掌握这些关键字和语法规则,可以实现高效、准确的数据库查询和操作。

技术细节

创建数据库

CREATE DATABASE 数据库名;

CREATE DATABASE chapter1 – 创建一个新数据库

删除数据库

DROP DATABASE <数据库名>;
DROP DATABASE chapter1
USE chapter1


数据类型

/*
字符串类型:
CHAR(size)定长、VARCHAR(size)变长 size为字符长度
TEXT 长文本
TINYTEXT 短文本
BLOB 二进制长文本···


数字类型:

严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC)

近似数值数据类型(REAL、FLOAT(size,d)DOUBLE(size,d) d小数点右侧的最大位数…)。

整数类型 INT、TINYINT、SMALLINT、MEDIUMINT 和 BIGINT。(存储和范围不同)


日期/时间类型:

DATE()yyyymmdd、DATETIME()yyyymmddhhmmss、TIME()hhmmss、YEAR()
TIMESTAMP()1970-01-01 00:00:01至今多少秒、
···
*/
– 这是单行注释
这是单行注释
/* 这是多行注释
第一行
第二行 */


#创建表

CREATE TABLE table_name (column_name column_type);#三要素:表名 字段名 字段描述

CREATE TABLE offices (
  office_id INT NOT NULL PRIMARY KEY,
  address VARCHAR ( 50 ) NOT NULL,
  city VARCHAR ( 50 ) NOT NULL,
  province VARCHAR ( 50 ) NOT NULL 
);-- 创建一个名为offices的表


CREATE TABLE employees (
  employee_id INT NOT NULL,
  en_name VARCHAR ( 50 ) NOT NULL,
  ch_name VARCHAR ( 50 ) NOT NULL,
  job_title VARCHAR ( 50 ) NOT NULL,
  salary INT NOT NULL,
  reports_to INT,
  office_id INT NOT NULL,
  PRIMARY KEY ( employee_id ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 继续创建一个名为employees的表
-- 使用innodb存储引擎
-- 编码utf8


#删除数据表

DROP TABLE table_name ;

DROP TABLE employees;-- 删除表

#插入数据

INSERT INTO table_name ( field1, field2,…fieldN ) VALUES ( value1, value2,…valueN );

INSERT INTO employees 
VALUES
  ( '33391', 'jackson', '谭鸿飞', '销售经理', '62871', '37270', '1' );-- 插入完整行
  
INSERT INTO employees ( employee_id, en_name, ch_name, job_title, salary, office_id )
VALUES
  ( '37270', 'hall', '边天磊', '总经理', '163996', '10' );-- 提供列名,插入部分行

#查询数据

SELECT column(列名), another_column, …FROM table(表名)

use chapter1

SELECT
  employee_id,
  ch_name 
FROM
  employees
  

SELECT
  * 
FROM
  employees
  

SELECT DISTINCT
  reports_to 
FROM
  employees -- 显式指定返回不同的列 
-- -- -- -- -- -- --


#过滤数据

– WHERE 子句
SELECT
office_id,
ch_name,
en_name
FROM
employees
WHERE
office_id= 1
or ch_name =‘边天磊’

– where满足的操作符 = != <> BETWEEN IS NULL··· 数值不需要带’',但是字符需要

– AND操作符——通过不止一列过滤,可以使用AND操作符给WHERE子句添加条件。

– OR操作符——匹配任意条件则会返回并输出。

SELECT
  office_id,
  ch_name,
  en_name,
  salary
FROM
  employees 
WHERE
  (office_id= 1 OR office_id =2)  //office_id IN (1,2)
AND 
  salary>95000
-- AND的优先级更高,必要时需要通过括号进行明确分组。
  
SELECT
  office_id,
  ch_name,
  en_name 
FROM
  employees 
WHERE
  office_id NOT IN (1,2)
AND 
  salary>95000
  
  
  -- like子句 构造通配符
SELECT
  office_id,
  ch_name,
  en_name 
FROM
  employees 
WHERE
  en_name LIKE'b%' -- % 任意字符 _ 单个字符 (包括空格)注意通配符的位置和个数
  
  
  
SELECT
  office_id,
  ch_name,
  en_name 
FROM
  employees 
WHERE
  en_name like '%n'

SELECT
  office_id,
  ch_name,
  en_name 
FROM
  employees 
WHERE
  en_name like 'ha___' -- 不要过度使用
  

#排序
SELECT
  office_id,
  ch_name,
  en_name 
FROM
  employees 
where 1=1
ORDER BY 1,3
#LIMIT
SELECT 
  reports_to 
FROM
  employees 
  LIMIT 5 
  
SELECT 
  reports_to 
  ,salary
FROM
  employees 
order by salary desc
LIMIT 5 
  
  
SELECT 
  salary 
FROM
  employees 
  LIMIT 5 OFFSET 5;-- 限制结果

#算数计算

/* MySQL运算符及运算符的优先级。
算术运算符:+、-、*、/、%
比较运算符:=、<>、!=、>、<、>=、<=、BETWEEN、NOT BETWEEN、IN、NOT IN 、ISNULL 、 IS NOT NULL
逻辑运算符:NOT、AND、OR
位运算符:&、|、^、!
*/
SELECT
salary+2000,salary
FROM
employees


#函数处理数据


– 文本处理
SELECT
offices.*, LEFT(address, 3)
FROM
offices
– 其他文本函数
LENGTH(str)/LOWER(str)转换为小写/LTRIM(str)去掉字符串左边的空格/REPLACE(s,s1,s2)···
– 数值处理函数
ABS(X)/COS(X)/PI()/MOD(x,y)


#汇总数据

– 聚集函数

AVG()-- 只能用于单个列
COUNT()–
SELECT
COUNT(*),
MAX(salary),
AVG(salary)+500 AS averge_salary
FROM
employees
WHERE
office_id=3


#分组数据

– 创建分组


SELECT
COUNT(*),
MAX(salary),
AVG(salary)+500 AS averge_salary,
office_id
FROM
employees
GROUP BY
office_id


– 过滤分组

SELECT

COUNT(),

MAX(salary),

AVG(salary)+500, – AS averge_salary

office_id

FROM

employees

GROUP BY

office_id

HAVING COUNT()>3 – 在这里where不可以在进行过滤分组,因为他过滤的是行而不是分组。


– 分组和排序

– ORDER BY 对产生的输出排序 任意列都可以(甚至没有被选中的列也可以使用)

– GROUP BY 对行分组,但是输出可能不是分组的顺序,只可以选择列或者表达式列,而且必须使用每个选择列表达式

SELECT
COUNT(*)AS items,
MAX(salary),
AVG(salary)+500 AS averge_salary,
office_id
FROM
employees
GROUP BY
office_id
HAVING items>3
ORDER BY averge_salary DESC


子查询

SELECT
address
FROM
offices
WHERE
office_id IN ( SELECT office_id FROM employees WHERE job_title = ‘销售经理’ );
– 一般不这么写因为难以阅读和调试。同时子语句的查询语句只能查询单个列。
– 两个表通过一个where联结,三个表用至少次过滤 WHERE AND

#连接表

/JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

outer join/

use chapter1

SELECT
  address,en_name,ch_name
FROM
  offices,employees
WHERE
  offices.office_id=employees.office_id
AND job_title like "售前%"
-- 为了匹配,必须完全限定列名,谨防笛卡尔积的联结(叉联结)

SELECT E.*,O.*
FROM employees as E,offices O

自然连接
SELECT E.*,O.*
FROM employees E,offices O
WHERE E.office_id=O.office_id


内连接 – inner join on


外连接 – outer join on

左外连接 右外连接


SELECT offices.,employees.

FROM offices LEFT JOIN employees

ON employees.office_id=offices.office_id


全链接 – 左外连接+ union+右外连接

自连接 – 不是连接类型,但是是一种比较常用的手段

SELECT
  E1.en_name,E1.salary,E1.office_id,E2.en_name,E2.salary,E2.office_id
FROM
  employees AS E1,employees E2
WHERE
  E1.salary<E2.salary
AND
  E1.office_id=3
AND
  E2.office_id=4

组合查询

UNION 查询必须包括相同的列,表达式和聚集函数 和 UNION ALL 包含所有行,不去重

小结

如果你们学习完成SQL必知语法后,对于数据库的查询和操作有了更深入的理解和掌握。掌握了SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等关键字和语法规则,能够更加灵活地编写SQL查询语句,实现对数据库中数据的精确提取和操作。通过不断练习和实践,我相信我能够运用这些语法知识处理更加复杂的数据库任务,提高工作效率和质量。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
206 62
|
4月前
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
261 18
|
4月前
|
SQL 关系型数据库 MySQL
MySQL探索:详解WITH AS语法的使用。
总的来说,MySQL的 `WITH AS`语法就如同我们路途中的导航设备,能帮助我们更好地组织和简化查询, 增强了我们和数据沟通的能力,使得复杂问题变得可控且更有趣。不论是在森林深处,还是在数据的海洋中,都能找到自己想要的路途和方向。
463 12
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
147 12
|
5月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
5月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
6月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL
本文探讨了在YashanDB(崖山数据库)中执行某些SQL语句时出现的报错问题,对比了MySQL的成功执行结果。问题源于SQL-92标准对非聚合列的严格限制,要求这些列必须出现在GROUP BY子句中,而SQL:1999及更高版本允许非聚合列直接出现在选择列中。YashanDB和Oracle遵循SQL-92标准,因此会报错。文章提供了两种解决方法:使用聚合函数处理非聚合列,或将GROUP BY与ORDER BY拆分为两层查询。最后总结指出,SQL-92标准更为严谨合理,建议开发者遵循此规范以避免潜在问题。
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
570 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!

热门文章

最新文章

推荐镜像

更多