SQL 语句分类
Data Definition Language (DDL 数据定义语言) 如:建库,建表
Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
Data Query Language(DQL数据查询语言),如:对表中的查询操作
Data Control Language(DCL 数据控制语言),如:对用户权限的设置
MySQL 的语法
每条语句以分号结尾,如果在 SQLyog 中不是必须加的。
SQL 中不区分大小写,关键字中认为大写和小写是一样的
3 种注释:
注释的语法
说明
--空格
单行注释
/* */
多行注释
#
这是 mysql 特有的注释方式
创建数据库的几种方式
创建数据库
CREATE DATABASE数据库名;
判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS数据库名;
创建数据库并指定字符集
CREATE DATABASE 数据库名CHARACTER SET 字符集;
查看所有的数据库
show databases;
修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
删除数据库的语法
DROP DATABASE 数据库名;
查看正在使用的数据库
SELECT DATABASE(); 使用的一个 mysql 中的全局函数
6.5.2 使用/切换数据库
USE数据库名;
创建表的格式
CREATE TABLE表名(字段名1字段类型1,字段名2字段类型2);
7.1.2 关键字说明:
创建表的关键字
说明
CREATE
创建
TABLE
表
常使用的数据类型如下:
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的 SQL 语句
SHOW CREATE TABLE 表名;
快速创建一个表结构相同的表语法
CREATE TABLE 新表名 LIKE 旧表名;
直接删除表
DROP TABLE 表名;
判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;
添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;
修改列类型 MODIFY
ALTER TABLE 表名 MODIFY列名 新的类型;
修改表名
RENAME TABLE 表名 TO 新表名;
修改字符集 character set
ALTER TABLE 表名 character set 字符集;
插入记录
INSERT [INTO]表名[字段名] VALUES (字段值)
INSERT INTO表名:表示往哪张表中添加数据
(字段名1,字段名2, …):要给哪些字段设置值
VALUES (值1,值2, …):设置具体的值
所有的字段名都写出来
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
不写字段名
INSERT INTO表名VALUES (值1,值2,
值3…);
插入部分数据
INSERT INTO表名(字段名1,字段名2,
...) VALUES (值1,值2, ...);
查看包含 character 开头的全局变量
show variables like 'character%';
将表名2中的所有的列复制到表名1中
INSERT INTO表名1 SELECT * FROM表名2;
将表名2中的所有的列复制到表名1中
INSERT INTO表名1 SELECT * FROM表名2;
更新表记录
UPDATE表名SET列名=值[WHERE条件表达式]
UPDATE:需要更新的表名
SET:修改的列值
WHERE:符合条件的记录才更新
不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行
带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
DELETE FROM表名[WHERE条件表达式]
如果没有指定WHERE子句,MySQL表中的所有记录将被删除。
你可以在WHERE子句中指定任何条件
不带条件删除数据
DELETE FROM 表名;
带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;
使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名;
truncate 和 delete 的区别: truncate 相当于删除表的结构,再创建一张表。
-- 带条件删除数据,删除id为1的记录 delete from student where id=1;
-- 不带条件删除数据,删除表中的所有数据 delete from student;
DQL 查询表中的数据查询不会对数据库中的数据进行修改.只是一种显示数据的方式
SELECT列名FROM表名[WHERE条件表达式]
SELECT命令可以读取一行或者多行记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用WHERE语句来包含任何条件。
查询表所有行和列的数据
l 使用*表示所有列
SELECT * FROM 表名;
查询指定列
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
对列指定别名
SELECT字段名1 AS别名,字段名2 AS别名... FROM表名;
对列和表同时指定别名
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
查询指定列并且结果不出现重复数据
SELECT DISTINCT字段名FROM表名;
某列数据和固定值运算
SELECT列名1 +固定值FROM表名;
某列数据和其他列数据参与运算
SELECT列名1 +列名2 FROM表名;
条件查询的语法
SELECT字段名FROM表名WHERE条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
运算符
比较运算符
说明
>、=、=、<>
<>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN...AND
在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
IN(集合)
集合表示多个值,使用逗号分隔
LIKE '张%'
模糊查询
IS NULL
查询某一列为 NULL 的值,注:不能写=NULL
逻辑运算符
逻辑运算符
说明
and或&&
与,SQL 中建议使用前者,后者并不通用。
or或||
或
not或!
非
in 关键字
SELECT字段名FROM表名WHERE字段in (数据1,数据2...);
in里面的每个数据都会作为一次条件,只要满足条件的就会显示
范围查询
BETWEEN值1 AND值2
表示从值1到值2范围,包头又包尾
比如:age BETWEEN 80 AND 100相当于:age>=80 && age<=100
like 关键字
LIKE表示模糊查询
SELECT * FROM表名WHERE字段名LIKE '通配符字符串';