MySQL常用语法(基础)总结

访客 阅读:194 2021-06-03 14:46:42 评论:0

SQL的主要语法: (来源官方)

SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

MYSQL中常用语法:

基本和SQL中语法一致,但是还是有一些区别

现在来详细介绍

表的各种约束(参考博客):
1.NOT NULL
2.UNIQUE
3.PRIMARY KEY
4.FOREIGN KEY
5.CHECK –MySQL不支持CHECK
6.AUTO_INCREMENT
7.ZEROFILL
8.DEFAULT
9.UNSIGNED

------------------------------------------------------------------------------------- 
 
CREATE DATABASE user_database             --创建一个数据库user_database 
use user_database                         --进入user_database这个数据库 
show tables                               --查看所有的表 
show table_name                           --查看指定名字的表 
DESC table_name                           --查看指定名字的表结构 
CREATE table_name(                        --创建一个表table_name              
    id INT(20) AUTO_INCREMENT PRIMAR KEY, --创建一个INT主键自增列id   
    name VARCHAR(30) NOT NULL,            --创建一个非空VARCHAR列name 
    age INT(5) default 18,                --创建一个默认为18的列age 
    email VARCHAR(40) UNIQUE);            --创建一个值唯一的VARCHAR列email 
 
------------------------------------------------------------------------------ 
 
一、插入 
1.插入一条完整的数据 
INSERT INTO table_name(name,email,age) VALUES('hhh ',[email protected] ','17'); 
2.插入数据记录一部分 
INSERT INTO table_name(name,email,age) VALUES('passer',NULL,'17') 
INSERT INTO table_name(name,age) VALUES('son','17') 
3.插入多条数据记录(MySQL特有) 
INSERT INTO table_name(name,email,age) VALUES('Z','12@','19'),('c','12z3@','199'),('a','121@','190') 
4.插入查询操作(测试) 
INSERT INTO table_name(name) SELECT name FROM table_name 
 
------------------------------------------------------------------------------ 
 
二、修改 
1.需求:修改列元素的值  例如修改name 
UPDATE table_name SET name='dad' WHERE name='son' 
2.需求:修改id为3的学生,名字改为张三,年龄改为18,邮箱改为zhang@ 
UPDATE table_name SET name='张三',age=18,email='zhang@' WHERE ID=3 
3.尽量不修改主键(会导致通过原来的主键再也找不到该条数据了) 
如果没有WHERE则修改所有数据 
 
------------------------------------------------------------------------------ 
 
三、删除 
1.需求:删除id为5的数据 
DELETE FROM t_student WHERE id=5 
2.如果没有WHERE则表示清空该表 
 
------------------------------------------------------------------------------ 
 
四、查询(基础语法) 
SELECT column1,column2...  
FROM 表名 
1.如果是查询所有的列;可以写成SELECT * FROM 表名; 
SELECT * FROM tb_demo 
SELECT column1,column2... FROM table_name 
2.去除查询结果重复的内容 
SELECT DISTINCT StockCompany From table_name 
 
------------------------------------------------------------------------------ 
 
五、需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣) 
SELECT id,name,Price*Discount From t_product 
 
------------------------------------------------------------------------------ 
 
六、需求:查询所有货品的ID,名称,和各进五十个的成本价CostPrice 
SELECT id,name,CostPrice*50 
 
------------------------------------------------------------------------------ 
 
七、需求:查询所有货品的ID,名称,各进五十个,并且每个运费一元的价格 
SELECT id,name,(CostPrice+1)*50 
 
------------------------------------------------------------------------------ 
 
八、查询所有货品的ID,名称,各进五十个,并且每个运费一元的价格(使用别名) 
1.SELECT id, AS 货品ID,name,(Price+1)*50 AS 成本价 FROM t_product 
2.SELECT id 货品ID,name,(Price+1)*50 成本价 FROM t_product 
 
------------------------------------------------------------------------------ 
 
九、为了方便用户浏览查询的结果数据,有时需要设置显示格式,可以使用CONCAT函数来连接字符串 
需求:查询商品的名字和零售价 
  格式:xxx商品的零售价为:xxx 
SELECT CONCAT(name,'商品的零售价为',Price) AS record FROM t_product 
 
------------------------------------------------------------------------------ 
 
十、查询货品零售价为指定条件的货品信息(比较符>,<,<=,>=,!=,<>) 
SELECT *FROM t_product WHERE Discount<0.5 
SELECT *FROM t_product WHERE Discount!=0.5 
SELECT *FROM t_product WHERE Discount<>0.5 
SELECT *FROM t_product WHERE Price>=1000 
SELECT *FROM t_product WHERE Price<=1000 
SELECT name FROM t_product WHERE Price>=2000 
SELECT name FROM t_product WHERE Price*Discount>=500 
 
------------------------------------------------------------------------------ 
 
十一、SQL语句执行顺序 
1.先执行FROM(确定从哪张表开始做查询) 
2.接着执行WHERE(过滤掉不合法的数据) 
3.在执行SELECT(选择最终需要显示那些列) 
4.最后执行ORDER BY(对查询的结果排序) 
 
------------------------------------------------------------------------------ 
 
十二、运算符(&&,||,!) 
(AND,OR,NOT) 
SELECT *FROM t_product WHERE Price>=500&&Price<=1000 
SELECT *FROM t_product WHERE Price>=500 OR Price>=1000 
 
优先级 
NOT,AND,OR 
 
----------------------------------------------------- 
十三、SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 最小值 AND 最大值 
SELECT *FROM t_product WHERE Price>=500&&Price<=1000 
SELECT *FROM t_product WHERE Price BETWEEN 500 AND 1000 
SELECT *FROM t_product WHERE NOT (Price>=500&&Price<=1000) 
SELECT *FROM t_product WHERE Price NOT BETWEEN 500 AND 1000 
 
------------------------------------------------------------------------------ 
 
十四、需求:查询ID为2或者4的货品 
SELECT *FROM t_product WHERE ID=2 OR ID=4 
SELECT *FROM t_product WHERE ID IN(2,4) 
 
------------------------------------------------------------------------------ 
 
十五、需求:查询ID为NULL的所有商品 
SELECT *FROM tb_demo WHERE ID IS NULL 
 
--------------------------------------------------------- 
 
十六、模糊查询 
WHERE name LIKE '张_三' 
WHERE name LIKE '张%' 
WHERE name LIKE '%张%' 
1.使用LIKE运算符执行通配查询,查询条件可包含文字字符和数字 
2.%通配符:可表示零或者多个字符(必须占据一个位置) 
3._通配符:可表示一个字符(可以占据0~N个位置,任意字符) 
4.通配符:用来实现匹配部分值的特殊字符 
 
--------------------------------------------------------- 
 
十七、使用ORDER BY子句将记录排序 
ASC:升序,缺省 
DESC:降序 
ORDER BY子句必须出现在SELECT语句的最后 
格式: 
SELECT <selectList> 
FROM table_name 
WHERE 条件 
 
单列排序 
ORDER BY 列名1[ASC/DESC],列名2[ASC/DESC]...; 
SELECT * FROM t_product ORDER BY Price DESC 
 
多列排序 
SELECT *FROM t_product ORDER BY Price DESC ,Date ASC 
 
列的别名排序 
需求:查询m系列并按照批发价排序(加上别名) 
SELECT name,Price*Discount pfPrice 
FROM t_product 
WHERE name LIKE '%m%' 
ORDER BY pfPrice 
如果列的别名使用了引号,那么排序无效 
 
-------------------------------------------------------------------------------- 
 
十八、MySQL的分页查询 
SELECT *FROM t_product LIMIT ?,? 
第一个?:表示从哪里开始截取,第一条数据的索引为0 
第二个?:每页最多的条数,pageSize 
SELECT *FROM t_product LIMIT (currentPage-1)*pageSize,pageSize 
 
-------------------------------------------------------------------------------- 
 
十九、聚集函数,统计函数,分组函数 
聚集函数作用于一组数据,并对一组数据返回一个值 
 
COUNT :统计结果记录数 
MAX:统计计算最大值 
MIN:统计计算最小值 
SUM: 统计计算求和 
AVG:统计计算平均值 
 
1.需求:查询所有的商品平均零售价 
SELECT AVG(Price) FROM t_product 
2.需求:查询商品总记录数(在Java中必须使用long接收) 
SELECT COUNT(*) FROM t_product 
SELECT COUNT(主键) FROM t_product 
3.需求:查询分类为2的商品总数 
SELECT COUNT(id) 
FROM t_product 
WHERE category = 2 
4.需求:查询商品的最小零售价,最高零售价,以及所有商品零售价的总和 
SELECT MIN(Price),MAX(Price),SUM(Price) FROM t_product 
 
-------------------------------------------------------------------- 
 
思考:带有排序操作的分页查询 
先排序再分页 
SELECT id,price,name FROM t_product ORDER BY price LIMIT 0,5 
 
------------------------------------------------------------------- 
 
二十、多表查询 
单表查询:从一张表中查询数据 
多表查询:从多张表中联合查询出数据 
 
为什么使用多表查询: 
需要查询多张表中的数据,此时通过一张表是不能查询完整的 
 
单表查询: 
SELECT 列名1,列名2,列名3,... 
FROM 表名 
 
多表查询(最简单的): 
SELECT <selectList> 
FROM 表名A,表名B 
 
笛卡尔积:没有连接条件的表关系返回的结果 
多表查询会产生笛卡尔积: 
实际运行环境避免使用全笛卡尔积,使用等值连接 
 
解决方案:在WHERE中加入有效的连接条件--->等值连接 
注意: 
连接N张表,至少需要n-1个连接条件 
 
需求:查询所有的货品信息,对应的货品分类信息 
SELECT *FROM t_product,t_product_category 
WHERE t_product.category = .category 
 
--------------------------------------------------------- 
 
外键约束:在A表中的外键列的值必须来源于B表中的主键列 
 
注意:在MySQL中,InnoDB支持事物和外键 
修改表的存储引擎为InnoDB 
ALTER TABLE 表名 ENGINE = 'InnoDB' 
 
在开发中,外键列起名字:一般是所引用表名_引用列名 
t_product_category 
 
------------------------------------------------------------ 
 
二十一、 
使用表名前缀在多个表中区分相同的列 
在不同表中具有相同列名的列可以用表的别名加以区分 
使用别名可以简化查询 
使用表名前缀可以提高执行效率 
如果使用了表的别名,则不能再使用表的真名 
 
1.需求:查询货品ID,货品名称,货品所属分类名称 
SELECT id,tp.name,tpc.name 
FROM t_product tp,t_product_category tpc 
WHERE tp.category = tpc.category 
 
2.需求:查询零售价大于200的无线鼠标 
SELECT id,price,tp.name,tpc.name 
FROM t_product p,t_product_category c 
WHERE tp.Category = tpc.Category AND tp.Price >= 500 AND tpc.name = '无线鼠标' 
 
3.需求:查询零售价大于200的无线鼠标(使用别名) 
 
4.需求:查询每个货品对应的分类以及对应的库存 
SELECT tp.id,tp.name,tpc.name,tp.stocknum 
FROM t_product tp,t_product_category tpc,t_stocknum ts 
WHERE tp.category=tpc.category AND tp.id = ts.id 
 
5.需求:如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表) 
SELECT tp.id,tp.name,tpc.name,tp.price*ts.storeNum profit 
FROM t_product p,t_product_category c,t_stocknum ts 
WHERE tp.category = tpc.category AND tp.id = ts.id 
ORDER BY profit DESC 
 
6.需求:查询每个商品分类的名称和父分类名称 
SELECT child.id,child.name,parent.name 
FROM t_productdir child,t_productdir parent 
WHERE child.parent_id = parent.ID 
 
------------------------------------------------------------------------------ 
 
二十二、数据备份和恢复 
在改企业数据库之前,请先备份 
MySQL自身的数据库维护: 
通过Cmd命令进入dos窗口 
1.导出:mysqldump -u账户 -p密码 数据库名称>脚本文件存储地址 
mysqldump -uroot -padmin user_database >C:/shop_bak.sql 
2.导入:mysql -uroot -padmin user_database <c:/shop_bak.sql 
Navicat工具的导入和导出:使用sql文件来存储,通用 
Navicat工具的备份和还原:使用psc格式的文件,必须使用支持的工具才能运行还原

标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们