SQL的概述
Structured Query Language:结构化查询语言
SQL就是定义了操作所有关系型数据库的规则,可以用SQL操作MYSQL数据库也可以使用SQL操作ORACLE数据库,
强制要求所有的关系型数据库遵守SQL相关的规则.
但是每个数据库厂商实现SQL的方式不一样的,所有使用SQL操作不同的数据库的时候会出现一点区别,
这个就是专属于这个数据库的方言.
SQL的通用语法
SQL语句可以以单行或者多行进行书写,以分号(;)进行结尾.
可以使用空格和缩进来提高SQL语句的可读性.
MYSQL数据库的SQL语句不分区大小写,但是关键字推荐使用大写来书写.
SHOW DATABASES;
SQL中的注释分类
SHOW DATABASES; #查询当前系统中的所有数据库(单行注释)
SHOW DATABASES; /查询当前系统中的所有数据库(多行注释)/
SHOW DATABASES; – 查询当前系统中的所有数据库(单行注释)
SQL语句的分类
DDL(Data Definition Language)数据定义语言
用于定义数据库对象中的数据库/表/列等.
CREATE/DROP/ALTER
DML(Data Manipulation Language) 数据操作语言
用于对于数据库表中的记录进行增删改.
INSERT/DELETE/UPDATE
DQL(Data Query Language)数据查询语言
用于查询数据库中标的记录(数据)
SELECT/WHERE
DCL(Data Control Language)数据控制语言
用于定义数据库的访问权限和安全级别以及创建用户.
GRANT/REVOKE
DDL语句
CRUD的概念
C -> CREATE:创建
R -> RETRIEVE:查询
U -> UPDATE:修改
D -> DELETE:删除
DDL常用语句
查询所有数据库的名称
SHOW DATABASES;
查看指定数据库的字符集/创建语句
SHOW CREATE DATABASE 数据库名称;
按照指定名称创建数据库
CREATE DATABASE 数据库名称;
按照名称创建数据库(创建前先判断是否已经存在,如果存在则不创建,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
按照指定名称创建数据库(创建前先判断是否已经存在,如果存在则不创建,如果不存在则创建)并指定数据库的字符集.
CREATE DATABASE IF NOT EXISTS 数据库名称 CHARACTER SET 字符集名称;
修改数据库的字符集
ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
删除数据库(删除之前判断数据库是否存在,如果存在则删除,如果不存在则不进行删除操作)
DROP DATABASE IF EXISTS 数据库名称;
查看当前正在使用的数据库
SELECT DATABASE();
使用指定的数据库
USE 数据库名称;
查询指定数据库下的所有表名称
SHOW TABLES;
查询指定的表结构
DESC 表名称;
创建指定名称的表
CREATE TABLE 表名(
列名称 数据类型,
列名称 数据类型,
列名称 数据类型
);
#复制表
CREATE TABLE 新表名 LIKE 要复制的表名;
DROP TABLE IF EXISTS 表名;
修改表名称
ALTER TABLE 要修改的表名称 RENAME TO 修改后的表名称;
修改表的字符集
ALTER TABLE 表名 CHARACTER SET 字符集名称;
添加新的一列到指定的表中
ALTER TABLE 表名 ADD 列名 数据类型(1);
修改指定的表中的指定列的列名以及数据类型
ALTER TABLE 表名 CHANGE 修改前的列名 修改后的列名 修改后的数据类型;
修改指定的表中的指定列的数据类型
ALTER TABLE 表名 MODIFY 列名 修改后的数据类型;
删除指定表的中的指定列
ALTER TABLE 表名 DROP 列名;
DML语句
DML常用语句
添加数据到表中
添加方式(1)
INSERT INTO 表名(列名1,列名2,列名3) VALUES (值1,值2,值3);
使用此种方式添加,列名与表名要一一对应,否则SQL语句将会出错.
添加方式(2)
INSERT INTO 表名 VALUES (值1,值2,值3,值4,值5,值6);
使用此种方式添加,虽然不用书写列名,但是要默认给所有列进行值的添加,如果对应的列没有值,可以写NULL.
注意事项
添加的数据数字类型的可以不加单引号/双引号,其余的数据都要添加单引号/双引号.
删除表中的数据
DELETE FROM 表名 WHERE [条件];
注意事项
如果不添加WHERE条件,则会将删除指定表的全部数据,请小心使用.
如果真的要将表中的数据全部删除,使用DELETE效率比较低,使用TRUNCATE语句会将表删除然后再创建一张空表,效率更高.
TRUNCATE TABLE 表名;
修改表中的数据
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,列名n = 值n WHERE [条件]
注意事项
如果不添加判断条件,则会修改本表中的所有数据.
DQL语句格式
SELECT 字段名称
FROM 表名列表
WHERE 条件列表
GROUP BY 分组字段
HAVING 分组之后的条件
ORDER BY 排序规则
LIMIT 分页限定;
基础查询
多字段查询
#查询student3表中的所有NAME和AGE (多字段查询)
SELECT name,age FROM student3;
查询表中的所有数据
SELECT * FROM student3;
去除重复数据
SELECT DISTINCT address FROM student3;
计算列数据
#计算student3表中的MATH与ENGLISH值的和
SELECT 列名,列名+列名 FROM 表名
SELECT name,math+english FROM student3;
如果参与计算的列有NULL参与运算,计算结果都为NULL.
如果想要为NULL的值按照某种值进行计算,那么可以使用IFNULL函数进行判断.
IFNULL(可能出现NULL值的列,值)
#计算student3表中的MATH与ENGLISH值的和,如果有数据为NULL,则按照0分计算.
SELECT name, math, english, IFNULL(math, 0) + IFNULL(english, 0)
FROM student3;
查询结果别名
SELECT name “姓名”, math “数学成绩”, english “英语成绩”, IFNULL(math, 0) + IFNULL(english, 0) “总成绩”
FROM student3;
条件查询
WHERE子句条件
运算符
>
#查询所有AGE大于20的数据信息
SELECT * FROM student3 WHERE age > 20;
<
SELECT * FROM student3 WHERE age < 50;
<=
#查询所有AGE大于等于20的数据信息
SELECT * FROM student3 WHERE age >= 20;
>=
#查询所有SEX为男的数据信息
SELECT * FROM student3 WHERE sex = “男”;
<>/!=
#查询所有SEX不是男的数据信息(!=)
SELECT * FROM student3 WHERE sex != “男”;
#查询所有SEX不是男的数据信息(<>)
SELECT * FROM student3 WHERE sex <> “男”;
BETWEEN…AND
BETWEEN…AND 包括头部数据也包括尾部数据.
#查询MATH位于80-100之间的数据信息.
SELECT * FROM student3 WHERE math BETWEEN 80 and 100;
IN
#查询AGE是20或者22的数据信息.
SELECT * FROM student3 WHERE age IN (20,22);
IS NULL
#查询英语成绩为NULL的数据信息.
SELECT * FROM student3 WHERE english IS NULL;
NULL值不可以使用=和!=/<>进行判断.
AND
与Java中的&&意思一样,两种情况都符合才可以.
#查询AGE是20或者22的数据信息.
SELECT * FROM student3 WHERE age = 22 OR age = 20;
OR
与Java中的||意思一样,两种情况符合一种即可.
#查询AGE是20或者22的数据信息.
SELECT * FROM student3 WHERE age = 22 OR age = 20;
NOT
#查询英语成绩不为NULL的数据信息.
SELECT * FROM student3 WHERE english IS NOT NULL;
NOT要放在IS之后,不可以放在IS之前.
模糊查询
占位符:
表示任意单个字符
%表示任意多个字符
LIKE
模糊查询的关键字LIKE
使用方法
#查询所有NAME中姓马的数据信息
SELECT * FROM student3 WHERE name LIKE “马%”;
#查询所有NAME中第二个字是化的数据信息.
SELECT * FROM student3 WHERE name LIKE "化%";
#查询所有NAME中是三个字的数据信息,此处的""中是三个.
SELECT * FROM student3 WHERE name LIKE "__";
#查询所有NAME中带有德字的数据信息.
SELECT * FROM student3 WHERE name LIKE “%德%”;