zoukankan      html  css  js  c++  java
  • 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.条件查询_模糊查询

    _:单个任意字符

    %:多个任意字符

  • 相关阅读:
    Java基础之StringBuffer和StringBuilder的区别
    ElasticSearch初体验之使用
    oracle基础之游标的理解与使用
    Java基础之创建实例化对象的方式
    vue.$nextTick实现原理
    vue3双向数据绑定原理_demo
    css实现水平-垂直居中的方法
    中文数组转为数字
    props&attrs provide inject
    vue2和vue3比较
  • 原文地址:https://www.cnblogs.com/upyang/p/11956745.html
Copyright © 2011-2022 走看看