SQL语言(指令)概述

1. 什么是SQL?

SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。

SQ标准(ANSI/ISO)有:

  • SQL-92:1992年发布的SQL语言标准;
  • SQL:1999:1999年发布的SQL语言标准;
  • SQL:2003:2003年发布的SQL语言标准;
    在这里插入图片描述
    这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。

虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。

2. SQL语法规范

  1. SQL语句可以在单行或多行书写,以分号结尾
  2. 可使用空格和缩进来增强语句的可读性
  3. SQL不区别大小写,关键字建议使用大写. (java是区分大小写的)

MySql中的常用数据类型

Mysql没有字符的概念,全是字符串

  • int:整型
  • double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
  • decimal:浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
  • char:固定长度字符串类型; char(255),数据的长度不足指定长度,补足到指定长度!
  • varchar:可变长度字符串类型; varchar(65535), zhangSan+8
  • text(clob):字符串类型;
  • blob:字节类型;(什么是字节类型的数据?图片,音乐,电影)jdbc
  • date:日期类型,格式为:yyyy-MM-dd;(年月日)
  • time:时间类型,格式为:hh:mm:ss(时分秒)
  • timestamp:时间戳类型;日期+时间 yyyy-MM-dd hh:mm:ss(年月日 时分秒)

3. SQL语句分类

3.1 DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

创建、删除、修改:库、表结构!!!

3.1.1 DDL操作数据库相关的指令

  • 查看所有数据库:SHOW DATABASES;
  • 切换(选择要操作的)数据库:USE 数据库名;
  • 查看数据库中的表:show tables;
  • 创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8]
    • 注:[IF NOT EXISTS]:可选, 代表 mydb1假设不存在,则创建
      [CHARSET=utf8]:可选,代表 设置编码为utf8 , 默认编码就是utf8
  • 删除数据库:DROP DATABASE [IF EXISTS] mydb1
    • 注:[IF EXISTS] :可选, 代表 mydb1假设存在,则删除
  • 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
    默认编码就是utf8

3.1.2 DDL语句对表的操作

  • 创建表:

CREATE TABLE [IF NOT EXISTS] 表名(
列名 列类型,
列名 列类型,

列名 列类型
);

  • 查看当前数据库中所有表名称:SHOW TABLES;

  • 查看指定表的创建语句:SHOW CREATE TABLE 表名;

  • 查看表结构:DESC 表名;

  • 删除表:DROP TABLE 表名; 删除库 DROP DATABASE 库名

  • 修改表:前缀:ALTER TABLE 表名

    • 修改之添加列:
      ALTER TABLE 表名 ADD (
      列名 列类型,
      列名 列类型,

      );
    • 修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据):ALTER TABLE 表名 MODIFY 列名 列类型;
    • 修改之修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
    • 修改之删除列:ALTER TABLE 表名 DROP 列名;
    • 修改表名称:ALTER TABLE 原表名 RENAME TO 新表名;

3.2 DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

增、删、改:表记录

3.2.1 DML语句往表中插入数据

DML(数据操作语言,包括对表的增、删、改操作。)
插入数据
格式一:INSERT INTO 表名(列名1,列名2, …) VALUES(列值1, 列值2, …);

在表名后给出要插入的列名,其他没有指定的列等同与插入null值。所以插入记录总是插入一行,不可能是半行。
在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应

格式二:INSERT INTO 表名 VALUES(列值1, 列值2);

没有给出要插入的列,那么表示插入所有列。
值的个数必须是该表列的个数。
值的顺序,必须与表创建时给出的列的顺序相同。

3.2.2 DML之修改数据

格式:
UPDATE 表名 SET 列名1=列值1, 列名2=列值2, … [WHERE 条件]
条件(条件可选的):

条件必须是一个boolean类型的值或表达式:UPDATE t_person SET gender=‘男’, age=age+1 WHERE sid=‘1’;
运算符:=、!=、<>、>、<、>=、<=、BETWEEN…AND、IN(…)、IS NULL、NOT、OR、AND
条件子句展示:
WHERE age >= 18 AND age <= 80
WHERE age BETWEEN 18 AND 80
WHERE name=‘zhangSan’ OR name=‘liSi’
WHERE name IN (‘zhangSan’, ‘liSi’)
WHERE age IS NULL, 不能使用等号 age=NULL 永远是false
WHERE age IS NOT NULL

3.2.3 DML之删除数据

删除的第一种形式:
DELETE FROM 表名 [WHERE 条件];(回滚)

删除的第二种形式:(不能回滚)
TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它是先删除drop该表,再create该表。而且无法回滚!!!

3.3 DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;(root)

DCL:给数据库管理系统增加一个用户,给用户分配权限(读/写)

3.4 DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

3.4.1 DQL数据查询语言

注意:查询不会修改数据库表记录!
查询所有列
SELECT * FROM 表名;
SELECT * FROM student;
其中“*”表示查询所有列

查询指定列
SELECT 列1 [, 列2, … 列N] FROM 表名;
SELECT id, name, chinese, english FROM 表名;

完全重复的记录只一次(去重)
当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这总可能就大了!

SELECT DISTINCT * | 列1 [, 列2, ... 列N] FROM 表名;
SELECT DISTINCT chinese FROM emp;

保查询员工表的工资,如果存在相同的工资只显示一次!

列运算数量类型的列可以做加、减、乘、除运算(只是把查询结果进行计算,不会更新到表里面去)
SELECT chinese*1.5 FROM student;
SELECT chinese+english FROM student;

字符串类型可以做连接运算
SELECT CONCAT(’$’, name) FROM student;

转换NULL值(NULL和任何值相加都是NULL)
有时需要把NULL转换成其它值,例如chinese+1000时,如果chinese列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当前0来运算。
SELECT IFNULL(chinese, 0)+1000 FROM student;
–> IFNULL(chinese, 0):如果chinese中存在NULL值,那么当成0来运算。

给列起别名
你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了
SELECT IFNULL(chinese, 0)+1000 AS 分数 FROM student;
其中AS可以省略

一、条件查询(WHERE)

与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。

  • 查询语文成绩在57并且数学成绩在60分以上的同学(AND)
    SELECT * FROM student WHERE chinese>57 and math>60;
  • 查询数学成绩在80到100分的同学(AND ,BETWEEN AND)
    SELECT * FROM student WHERE math>=80 AND math<=100;
    SELECT * FROM student WHERE math BETWEEN 80 AND 100;
  • 查询张三、李四、王五的成绩 in(选项1,选项2,选项3)
    SELECT * FROM student WHERE name in(‘zhangsan’,‘lisi’,‘wangwu’);
二、模糊查询(LIKE) 只能对字符串进行操作

模糊查询需要使用运算符:LIKE,其中_匹配一个任意字符,注意,只匹配一个字符而不是多个;%匹配0~N个字符。

  • 查询名字以黄开头,并且名字长度为3的同学
    SELECT * FROM student WHERE name LIKE ‘黄__’;
  • 如果我们想查询以L开头,名字几个字都可以 LIKE ‘l%’;
    SELECT * FROM student WHERE name LIKE ‘l%’;
  • 查询名字中包含i的同学 LIKE ‘%i%’
    SELECT * FROM student WHERE name LIKE ‘%i%’;
    注意:字段值为NULL的查询不出来!
    NULL不是字符串
三、排序查询

Order by

  1. 升序
    SELECT * FROM student ORDER BY chinese ASC;
    –> 按chinese排序,升序!
    –> 其中ASC是可以省略的
  2. 降序
    SELECT * FROM student ORDER BY math DESC;
    –> 按math排序,降序!
    –> 其中DESC不能省略
  3. 使用多列作为排序条件(组合排序)
    SELECT * FROM student ORDER BY chinese ASC, math DESC;
    –> 使用chinese升序排,如果chinese相同时,使用math的降序排
四、聚合函数

聚合函数就是对一组数据进行运算的函数
聚合函数用来做某列的纵向运算。

  1. COUNT
    SELECT COUNT(chinese) FROM student;
    –>计算student表中chinese列不为NULL的记录的行数
  2. MAX
    SELECT MAX(math) FROM emp;
    –> 查询最高数学成绩
  3. MIN
    SELECT MIN(english) FROM emp;
    –> 查询最低英语成绩
  4. SUM
    SELECT SUM(math) FROM student;
    –> 查询数学成绩总和
  5. AVG
    SELECT AVG(chinese) FROM emp;
    –> 查询语文平均成绩
五、分组查询(GROUP BY)

按条件分类的意思
分门别类的意思

1、 什么是分组查询?
分组查询就是对查询结果按照某种条件进行分组!然后可以通过聚合函数来获得组相关的信息。

– 分组
– group by
– 对查询出来的记录按条件进行分门别类
– 按名字分组
SELECT * FROM student GROUP BY NAME;
SELECT * FROM stu
– 按性别分组(2组)
– select 后面的显示字段应该是和组相关的信息吧
SELECT * FROM stu GROUP BY gender
SELECT gender FROM stu GROUP BY gender

六、分组条件查询(HAVING)

之前的条件过滤是在分组之前。例如:
对年龄大于二十的记录按性别进行分组,并统计每组的人数。
SELECT sex,count(*) 人数FROM stu WHERE age>20 GROUP BY sex;

而HAVING是对分组之后的组相关数据进行过滤
– having是对组相关的信息进行过滤
– 对年龄大于二十的记录按性别进行分组,并统计每组的人数。只显示组人数大于1的。
SELECT gender 组名称,COUNT(* ) 人数 FROM stu WHERE age>20 GROUP BY gender HAVING COUNT(*)>1

七、限制查询(LIMIT)

LIMIT是MySql的方言!
什么是方言!就是我独有的东西,而别人没有!
限制查询就是对查询结果的记录行数进行限制。

LIMIT后面两个参数的含义
LIMIT A,B;
A:记录开始的索引
B:要限制查询的记录行数

SELECT * FROM stu LIMIT 0,2; – 第一页 起始索引 0 (1-1)*2
SELECT * FROM stu LIMIT 2,2; – 第二页 起始索引 2 (2-1)*2
SELECT * FROM stu LIMIT 4,2; – 第三爷 起始索引 4 (3-1)*2

各种查询语句中用到的主要关键字总结及出现顺序

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY(对组相关信息进行排序)
LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值