MySQL数据库(二)——SQL

一、SQL的概念

1.什么是SQL

结构化查询语言(structured query language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

2.SQL的作用

通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

 3.SQL语句的分类

(1)DDL(Data Definition Language)数据定义语言

用于定义数据库对象:数据库、表、列等。关键字:create、drop、alter等。

(2)DML(Data Manipulation Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert、delete、update等。

(3)DQL(Data Query Language)数据查询语言

用于查询数据库中表的记录(数据)。关键字:select、where等。

(4)DCL(Data Control Language)数据控制语言

用于定义数据库的访问权限和安全级别,及创建用户 。关键字:GRANT、REVOKE等。

4.SQL通用语法

  •  SQL语句可以单行或多行书写,以分号结尾。
  • 可使用空格和缩进来增强语句的可读性。
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。例如:SELECT * FROM student;
  • 三种注释:单行注释:-- 注释内容(双横杠后必须有空格) 或 # 注释内容(MySQL特有)多行注释:/* 注释内容 */

二、DDL操作数据库(CRUD--create、retrieve、update、delete)

1.创建数据库

1.1 创建数据库的几种方式

  • 创建数据库:CREATE DATABASE 数据库名;
  • 判断是否存在并创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名;
  • 创建数据库并指定字符集(编码表):CREATE DATABASE 数据库名 CHARACTER SET 字符集;

1.2 具体操作

练习,创建数据库db4,判断是否存在,设置字符集gbk:create database if not exists db4 character set gbk;

2.查询数据库:

  • 查询所有数据库的名称:show databases;
  • 查询某个数据库的字符集(查询某个数据库的创建语句):show create database 数据库名称;

3.修改数据库

  • 修改数据库的字符集:alter database 数据库名 character set 字符集名称;

4.删除数据库

  • 删除数据库:drop database 数据库名称;
  • 判断是否存在并删除数据库:drop databse if exists 数据库名;

5.使用数据库

  • 查询正在使用的数据库名称:select database()
  • 使用数据库:use 数据库名;

三、DDL操作表

1.C(create)- 创建表

语法:

create table  表名(

  列名1 数据类型1,

  列名2 数据类型2,

  ……

  列名n 数据类型n

);

注意:

最后一列,不需要加逗号(,)

数据类型:

 datetime和timestamp类型格式一样,区别为:timestamp类型如果不给这个字段赋值或者赋值为null,则默认使用当前的系统时间来自动赋值。

varchar(20):最大20个字符。zhangsan - 8个字符   张三 - 2个字符。

复制表语法:创建表2,表2和表1表结构一样,语法:

create table 表名2 like 表名1;

2.R(Retrieve)- 查询表

  • 查询数据库中所有表的名称:show tables;
  • 查询表结构:desc 表名称 

3.U(update)- 修改表

  • 修改表名
    • alter table 表名 rename to 新的表名;
  • 修改表的字符集
    • 查看表的字符集:show create table 表名;
    • 修改表的字符集:alter table 表名 character set 字符集名称;
  • 添加列
    • alter table 表名 add 列名 数据类型;
  • 修改列名、类型
    • 修改列名和类型:alter table 表名 change 列名 新的列名 新的数据类型;
    • 修改类型:alter table 表名 modify 列名 新的数据类型;
  • 删除列
    • alter table 表名 drop 列名;

4.D(delete)- 删除表

  • 删除表:drop table 表名;
  • 判断是否存在并删除表:drop table if exists 表名;

四、DML操作数据库中表的记录

1. 添加数据

语法:

insert into 表名(列名1,列名2,……,列名n) values(值1, 值2, ……, 值n);

注意:

  • 列名和值要一一对应。
  • 如果表名后,不定义列名,则默认给所有数据添加值。insert into 表名 values(值1, 值2, ……, 值n);
  • 除了数字类型,其它类型需要使用引号(单引号、双引号都可以)。

2.修改数据

语法:

update 表名 set 列名1 = 值1 , 列名2=值2 , …… , 列名n=值n [where 条件];

注意:

如果不加任何条件,则会将表中所有记录全部修改。

3.删除数据

语法:

delete from 表名 [where 条件]

truncate table 表名; -- 删除表,并创建一个一模一样的空表。

注意:

  • 如果不加条件,则删除表中所有记录。
  • 如果要删除表中所有记录,有两种方式:
    • delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作。
    • truncate table 表名; -- 推荐使用。效率更高。先删除表,再创建一张一模一样的空表。

五、DQL查询语句的使用

语法:

select

  字段列表

from

  表名列表

where

  条件列表

group by

  分组字段

having

  分组之后的条件限定

order by

  排序

limit

  分页限定

1.排序查询

语法:order by 子句

order by 排序字段1 排序方式1, 排序字段2 排序方式2……

排序方式:

ASC:升序,是默认的。

DESC:降序。

如果有多个排序条件,则当前面的条件值一样时,才会去判断第二条件。

2.聚合函数

定义:将一列数据作为一个整体,进行纵向的计算。

cout:计算个数

max:计算最大值

min:计算最小值

sum:计算和

avg:计算平均值

注意:聚合函数的计算会排除null值。

select count(列名) from 表名;

解决方案有两种:

第一种选择不包含空列进行计算。主键;count(*)

第二种ifnull函数. select count(ifnull(english,0)) from student;

3.分组查询

语法:group by 分组字段

注意:

(1).查询后的字段只能是分组字段或聚合函数。select sex, avg(math), count(id) from student group by sex;

(2).where 在分组之前进行限定,如果不满足条件,则不参与分组。where后不可以跟聚合函数进行判定。

分组前对条件进行限定的操作:select sex, avg(math), count(id) from student where math > 70 group by sex;

(3).having 在分组之后进行限定,如果不满足条件,则不会被查询出来。having后可以跟聚合函数进行判定。

分组之后对条件进行限定的操作:select sex, avg(math), count(id) from student where math > 70 group by sex having count(id) > 2;

起别名更方便:select sex, avg(math), count(id) as persons from student where math > 70 group by sex having persons> 2;

4.分页查询

语法:limit 开始的索引, 每页查询的条数;

公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数

分页操作是一个“方言”

5.基础查询

(1)查询多个字段

select 字段1,字段2…… from 表名;

如果查询所有字段,可以用 select * from student;

(2)去除重复

select distinct 列名列表 from 表名

只有两个结果集的字段完全一致,才可以去除重复。

(3)计算列

一般可以用四则运算计算一些列的值。

select name, math, english, math + enlish from student;

如果有null参与的运算,计算结果都为null。

select name, math, english, math + ifnull(english,0) from student;

ifnull(表达式1, 表达式2):表达式1 - 需要判断哪个字段是否为null,表达式2 - 如果该字段为null的替换值。

(4)起别名

select name, math, english, math + ifnull(english, 0) as sumScore from student;

as可以省略,用空格代替。

6.条件查询

(1)where后跟条件子句

(2)运算符

比较运算符:

 逻辑运算符:

7.条件查询_模糊查询

_:单个任意字符

%:多个任意字符

原文地址:https://www.cnblogs.com/upyang/p/11956745.html