Day11_07——SQL语句

SQL语句的分类

1.DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
创建、删除、修改:库、表结构
2.DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
增、删、改:表记录
3.DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别
4.DQL******(Data Query Language):数据查询语言,用来查询记录(数据)。
ddl:数据库或表的结构操作
dml:对表的记录进行更新(增、删、改)
dql:对表的记录的查询
dcl:对用户的创建即授权
DDL数据库操作
1、数据库

  • 查看所有数据库:show databases( syntax表示语法错误)
  • 切换数据库:use 数据库名
  • 创建数据库:create database [if not exists] 数据库名 [charset=utf8]
  • 删除数据库:drop database [if exists] 数据库名
  • 修改数据库编码:alter database 数据库名 character set utf8
    2、数据类型
    int:整型
    double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
    decimal:浮点型,在表单钱方面使用该类型,因为不会出现精度确实问题。
    char:固定长度字符串类型,最长255,char(255);
    varchar:可变长度字符串类型,
    text(clob):字符串类型:(mysql独有的数据类型)
    -tinytext:很小2^8-1
    -text:小2^16-1
    -mediumtext:中 2^24-1
    -longtext:大 2^32-1
    blob:字符串类型:(mysql独有的数据类型)
    -tinyblob:很小2^8-1
    -blob:小2^16-1
    -mediumblob:中 2^24-1
    -longblob:大 2^32-1
    data:日期类型,格式为:yyyy-MM-dd;
    time:时间类型,格式为:hh:mm:ss
    timestamp:时间戳类型;包括时间和日期
    (在数据库中所有的字符串类型必须使用单引号,不能使用双引号;日期类型也要使用单引)
    3、表
  • 创建表:
    CREATE TABLE [IF NOT EXISTS] 表名{
    列名 列类型,
    列名 列类型
    };
  • 查看当前数据库中所有的表名称:SHOW TABLES;
  • 查看指定表的创建语句:SHOW CREATE TABLE 表明;
  • 查看表结构:DESC 表名;
  • 删除表:DROP TABLE 表明;
  • 修改表:前缀:ALTER TABLE 表明
    -修改之添加列:
    ALTER TABLE 表明 ADD{
    列明 列类型,
    列明 列类型
    };
    -修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在的数据):ALTER TABLE 表名 MODIFY 列名 列类型;
    -修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
    -删除列:ALTER TABLE 表明 DROP 列名;
    -修改表名称:ALTER TABLE 原表名 RENAME TO 新列名;
    DML操作
    1、插入数据
  • INIERT INTO 表名(列名1,列名2,列名3,......) VALUES(列值1,列值2,列值3,......);
    -在表名后给出要插入的列名,其他没有指定的列值等同于插入null值。所以插入记录总是插入一行,不可能是半行。
    -在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应。
  • INIERT INTO VALUES(列值1,列值2,列值3,......);
    -没有给出要插入的列,那么表示插入所有列
    -值的个数必须是该表列的个数
    -值的顺序,必须与表创建时给出的列的顺序相同
    2、修改数据
  • UPDATE 表名 SET 列名1=列值1,列名2=列值2,......[WHERE 条件]
  • 条件(条件可选)
    -条件必须时一个boolean类型的值或表达式:UPDATE t_person SET gender=’男’ WHERE sid=’1’;
    -运算符:=、!=、<>、>、<、>=、<=、BETWEEN...AND、IN(...)、IS NULL、NOT、OR、AND
    3、删除数据
  • DELETE FROM 表名 [WHERE 条件];
  • TRUNCATE TABKE 表名:TRUNCATE是DDL语句,它是先删除drop该表,在create该表。而且无法回滚
    DQL -- 数据查询语言
    查询不会修改数据表记录!
    一、基本查询
    1、字段控制
    1)查询所有列
    SELECT * FROM 表明;
    2)查询指定列
    SELECT 列1[,列2,列3,列3,列n] FROM 表名;
    3)完全重复的记录只一次
    当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列时,就会出现重复
    SELECT DISTINCT * | 列1[,列2,......] FROM 表名;
    SELECT DISTINCT sal FORM emp;
    4)列运算
    A:数量类型的列可以做加、减、乘、除运算。
    SELECT sal*1.5 FROM emp;
    SELECT sal+comm FROM emp;
    B:字符串类型可以做连续运算
    SELECT CONCAT(‘$’, sal) FROM emp;
    C:转换null值
    有时需要把null转换成其他值,例如com+1000时,如果com列存在null值,那么null+1000还是null,而我们这时希望把null当作0来使用。
    SELECT IFNULL(comm, 0)+1000 FROM emp;
  • IFNULL(comm, 0):如果comm中存在null值,那么当成0来运算
    D:给列起别名
    你也许已经注意到了,当使用列运算后查询出的结果集中的列名称很不好看,这时我们需要给列起给别名。
    SELECT IFNULL(comm, 0)+1000 AS 奖金 FROM emp;
  • 其中AS可以省略
    2.条件控制
    1)条件查询
    与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。
  • SELECT empno,ename,sal,coom FROM emp WHERE sal > 10000 AND comm IS NOT NULL;
  • SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
  • SELECT empno,ename,job FROM emp WHERE job IN(‘’经理, ’董事长’);
    2)模糊查询
    Where语句后面用like,’_’代表一个字符,’%’代表0~N个任意字符。
    二、排序
  1. 升序
    SELECT * FROM WHERE emp ORDER BY sal ASC;
    2)降序
    SELECT * FROM WHERE emp ORDER BY sal DESC;
    3)多列排序
    SELECT * FROM WHERE emp ORDER BY sal DESC, comm DESC, empno ASC;
  • 在sal值相同的情况下才会比较comm,同理比较empno
    三、聚合函数
    1.COUNT——计算表中不为null的纪录的行数
    2.MAX——查询最高值
    3.MIN——查询最低值
    4.SUM——查询和某一列
    5.ACG——查询平均
    四、分组查询
    分组查询是把记录使用某一列进行分组,然后查询组信息。
    例如:查看所有部门的记录数
  • SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;
    使用deptno分组,查询部门编号和每个部门的记录数
  • SELECT job, MAX(SAL) FROM emp GROUP BY job;
    使用job分组,查询每种工作的最高工资
    以部门分组,查询每组记录数,条件为记录数大于3
    SELECT deptno, COUNT() FROM emp GROUP BY deptno HAVING COUNT() > 3;
    五、limit子句(方言)
    LIMIT用来限定查询结果的起始行,以及总行数。
    例如:查询起始行为第5行,一共查询3行记录
    SELECT * FROM emp LIMIT 4, 3;
    分页查询:limit ?,?; ?---(当前页-1)*每页记录数 ?--每页行数

你可能感兴趣的:(Day11_07——SQL语句)