美文网首页
MySQL基础(一)

MySQL基础(一)

作者: 小心陨石 | 来源:发表于2017-04-21 11:43 被阅读0次

    一、分类

    1、DDL(Data Definition Language):数据库定义语言,用来定义数据库对象:表、列、库等。
    2、DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)。
    3、DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
    4、DQL(Data Query Language):数据查询语言,用来查询记录(记录)。

    二、DDL

    1、基本操作:

    1.1、 查看所有数据库名称:SHOW DATABASES;

    1.2、 切换数据库:USE mydb;,切换到mydb数据库。

    2、操作数据库

    2.1、 创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb;
    如果写CREATE DATABASE mydb,会创建一个名为mydb的数据库,但如果这个数据库已经存在,则会报错,为了避免错误,则在创建的时候加上[IF NOT EXISTS],在不存在的时候创建该库。

    2.2、 删除数据库:DROP DATABASE [IF EXISTS] mydb;IF EXISTS代表如果存在,意为如果数据库存在,则删除该数据库,如果不写IF EXISTS,在数据库不存在的是偶删除,会报错。

    2.3、修改数据库编码:ALTER DATABASE mydb CHARACTER SET UTF8;修改数据库mydb的编码为utf-8,注意:在MySQL中所有的utf-8编码都不能使用中间的“-”。

    3、数据类型

    MYSQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。

    常用类型:
    int:整型
    double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
    decimal:浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
    char:固定长度字符串类型;
    varchar:可变长度字符串类型;
    text:字符串类型;
    blob:字节类型;
    date:日期类型,格式为yyyy-MM-dd;
    time:时间类型,格式为hh:mm:ss;
    timestamp:时间戳类型;

    4、操作表

    4.1、操作表
    (1)、创建表:
    CREATE TABLE 表名(
    列名 列类型,
    列名 列类型
    ........
    );
    (2)、查看当前数据库中所有表名称:SHOW TABLES;
    (3)、查看指定表的创建语句:SHOW CREATE TABLE emp,查看emp表的创建语句;
    (4)、查看表结构:DESC emp; 查看emp表结构;
    (5)、删除表:DROP TABLE emp,删除emp表;
    (6)、修改表:
    修改之添加列:给stu表添加classname列:alter table stu add(classname varchar(100));
    修改之修改列类型:修改stu表的gender列类型为CHAR(2):ALTER TABLE stu MODIFY gender CHAR(2);
    修改之修改列名:修改stu表的gender为sex:ALTER TABLE stu change gender sex CHAR(2);
    修改之删除列:删除stu表的classname列:ALTER TABLE stu DROP classname;
    修改之修改表名称:修改stu表名称为student:ALTER TABLE stu RENAME TO student;

    三、DML

    1、插入数据

    INSERT INTO 表名(列名1,列名2,....)VALUES(值1,值2);

    INSERT INTO 表名 VALUES(值1,值2);这个语句因为没有指定要插入的列,所以插入数据的时候要按建表时的顺序插入;

    2、修改数据

    update 表名 set 列名1=值1,.....,列名n=值n WHERE 条件;

    3、删除数据

    delete FROM 表名 WHERE 条件;

    TRUNCATE TABLE 表名;虽然TRUNCATE和DELETE都可以删除表的所有记录,但原理不同。DELETE的效率没有TRUNCATE高; TRUNCATE其实属于DDL语句,它是先DROP TABLE,在CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,DELETE删除的记录可以回滚。

    四、DQL

    DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集到客户端。
    语法:
    SELECT selection_list 要查询的列名称
    FROM table_list 要查询的表名称
    WHERE condition 分组后的行条件
    GROUP BY grouping_columns 对结果分组
    HAVING condition 分组后的行条件
    ORDER BY sorting_columns 对结果分组
    LIMIT offset_start,row_count 对结果限定

    1、基础查询

    1.1、查询stu表的所有列: SELECT *FROM stu;
    1.2、查询stu表的指定列(sid,sname,age):SELECT sid,sname,age FROM stu;

    2、条件查询

    2.1、条件查询介绍
    条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:=、!=、<>、<、<=、>、>=;
    BETWEEN...AND; IN(set);IS NULL; AND; OR; NOT
    2.2、查询gender为女,并且年龄为50的记录
    SELECT *FROM stu WHERE gender=‘fename’ OR sname age=50;
    2.3、查询学号不是S_1001,S_1002,S_1003的及学生记录
    SELECT *FROM stu WHERE sid IN(‘S_1001’,‘S_1002’,‘S_1003’);
    2.4、查询年龄为null的记录
    SELECT *FROM stu WHERE age IS NULL;

    3、模糊查询

    当想查询姓名中包含a字母的学生时就需要使用模糊查询,模糊查询关键字LIKE。
    查询姓名中第二个字母为a的学生记录:SELETE *FROM stu WHERE sname LIKE '_i%';
    一个横线代表以为,”%“代表后面位数不限。

    4、字段控制查询

    4.1、去除重复记录,如果两行或两行以上的数据完全相同,就需要去除重复记录,关键字DISTINCT。
    SELECT DISTINCT sal FROM emp;
    4.2、查看雇员的月薪sal与佣金comm之和:因为定义的时候把它们定义成立数值类型,所以可以直接做加运算,如果sal或comm中有一个字段不是数据类型,就会出错
    SELECT *,sal + comm FROM emp;
    因为有可能出现sal或comm为null的情况,任何东西与null相加结果还是null,这时就需要将记录是null的之转换一下,使用 IFNULL(转换前的列名,需要替换null的数值),例SELECT *,sal + IFNULL(comm,0) FROM emp;
    4.3、给列名添加别名:按上文4.2所写,搜索出来的的月薪与佣金之和的列名为:
    sal + IFNULL(comm,0),看起来很别扭,这时可以给它起一个别名(如total):
    SELECT *,sal + IFNULL(comm,0)AS total FROM emp;同时AS可省略(起别名的时候):SELECT *,sal + IFNULL(comm,0)total FROM emp;

    5、排序

    5.1、查询stu表的所有记录,按年龄sage升序排序
    SELECT *
    FROM
    ORDER BY sage ASC;
    或者:
    SELECT *
    FROM
    ORDER BY sage ;
    ASC代表升序,默认为升序

    5.2、查询stu表的所有记录,按年龄sage降序排序
    SELECT *
    FROM
    ORDER BY sage DESC;
    DESC代表降序

    6、聚合函数

    聚合函数是用来做纵向运算的函数:有COUNT()、MAX()、MIN()、SUM()、AVG();
    6.1、COUNT:统计指定列不为null的记录行数
    例1:查询emp表中的记录数:
    SELECT COUNT(*)FROM emp;
    例2:查询emp表中有佣金(comm)的人数:
    SELECT COUNT(comm)FROM emp;
    注意:例1是统计所有非空行的记录的总数,例二中因为指定了是comm列,所以只统计comm列非NULL的行数
    6.2、SUM和AVG
    sum是计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0;
    avg是计算指定列的平均值,如果指定列的类型不是数值类型,那么计算结果为0;
    两者都是纵向的
    例1:查询emp表所有员工月薪(sal)和及平均佣金(comm)
    SELECT SUM(sal),AVG(comm)FROM emp;

    7、分组查询

    使用分组查询时需要使用BROUP BY子句,以GROUP BY后面的列来进行分组
    7.1、例:查询每个部门的部门编号(deptno)以及每个部门工资(sal)大于1500的人数
    SELECT deptno,COUNT(*)
    FROM emp
    WHERE sal>1500
    GROUP BY deptno;
    7.2、HAVING子句
    例:查询工资(sal)总和大于9000的部门编号以及工资和:
    SELECT deptno,SUN(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal)>9000;
    注意:WHERE是对分组前记录的条件查询,如果这行记录没有满足WHERE子句的条件,这行记录就不会参加分组,而HAVING是对分组后数据的约束,本例首先对部门进行分组,再找出工资和大于9000的部门,所以用HAVING

    8、LIMIT

    LIMIT用来限定查询结果的起始行,以及总行数
    例:从emp表中查询5行记录,起始行为0
    SELECT *FROM emp LIMIT 0,5;

    相关文章

      网友评论

          本文标题:MySQL基础(一)

          本文链接:https://www.haomeiwen.com/subject/wpolzttx.html