zoukankan      html  css  js  c++  java
  • MySQL 增删查改 必知必会

    MySQL 数据库中的基础操作

    3、表的修改

    对表的表名、字段、字段类型、字段长度、约束等进行修改。

    3.1 表的名称修改

    -- 语法:

    ALTER TABLE 库名.表名

    RENAME TO 新表名;

    -- 将foods表的名字修改为空food
    ALTER TABLE test.`foods`
    RENAME TO food;

    3.2 修改表的字段或者约束(修改表结构)

    3.2.1 为表添加/删除主键约束

    -- 语法:

    ALTER TABLE 库名.表名

    ADD PRIMARY KEY(字段名);

    -- 为表aa中的字段salary 添加主键约束
    ALTER TABLE test.`aa`
    ADD PRIMARY KEY(salary);
    DESC test.`aa`; -- 查看添加主键约束结果

    -- 语法:

    ALTER TABLE 库名.表名

    DROP PRIMARY KEY;

    -- 删除sales表的主键customer_no约束
    ALTER TABLE test.`sales`
    DROP PRIMARY KEY; -- 删除主键约束

    3.2.2 为表添加非空约束

    -- 语法:

    ALTER TABLE 库名.表名

    MODIFY 字段名 数据类型(数据长度) NOT NULL;

    -- 修改sales表约束,使客户名称customer_name不允许为空
    ALTER TABLE test.`sales`
    MODIFY customer_name INT(10) NOT NULL;

    3.2.3 修改表中某个字段的名称

    -- 语法:

    ALTER TABLE 库名.表名

    CHANGE 原字段名 新字段名 字段类型(数据长度);

    -- 修改表sales,将字段`product_name`名称修改为pct_name
    ALTER TABLE test.`sales`
    CHANGE product_name pct_name VARCHAR(30);

    3.2.4修改表中某个字段的数据类型

    -- 语法:

    ALTER TABLE 库名.表名

    MODIFY [COLUMN] `字段名` 新数据类型(新数据长度);

    -- 修改sales表中字段`pct_name`的字段类型为char(20)
    ALTER TABLE test.`sales`
    MODIFY pct_name CHAR(20); -- 修改数据库长度

    3.2.5添加字段

    -- 语法:

    ALTER TABLE 库名.表名

    ADD [COLUMN] `字段名` 数据类型(数据长度);

    ALTER TABLE test.`sales`
    ADD COLUMN product_name VARCHAR(30);

    3.2.6删除表中指定的字段

    -- 语法:

    ALTER TABLE 库名.表名

    DROP COLUMN 字段名;

    -- 删除表sales中的字段pct_name (面试题)
    ALTER TABLE test.`sales`
    DROP COLUMN pct_name;

    3.2.7将表中指定字段设置为外键

    -- 语法:

    ALTER TABLE 库名.表名

    ADD CONSTRAINT 外键约束名称 FOREIGN KEY(本表设置为外键字段的名称)

    REFERENCES 库名.`被引用字段的表名称`(被引用字段的名称);

    -- 为test库中表student的字段classno添加外键约束,
    -- 该外键字段的数据引用自表sclass的主键字段cno
    ALTER TABLE test.`student`
    ADD CONSTRAINT student_classno_fk FOREIGN KEY(classno)
    REFERENCES test.`sclass`(cno);

    3.2.8删除表中指定字段的外键约束

    步骤一:删除外键约束

    -- 语法

    ALTER TABLE 库名.表名

    DROP FOREIGN KEY 外键约束名称;

    步骤二:删除外键索引

    DROP INDEX 索引名称 ON 库名.表名;

    -- 删除test库student表的字段classno的外键约束student_classno_fk
    -- 步骤一 删除约束
    ALTER TABLE test.`student`
    DROP FOREIGN KEY student_classno_fk;
    -- 步骤二 删除索引
    DROP INDEX student_classno_fk ON test.`student`;

    3.2.9修改指定表的表名

    -- 语法

    RENAME TABLE 库名.旧表名 TO 新表名;

    -- 将test库class表的名称修改为classb
    RENAME TABLE test.`class` TO classb;

    4、 表结构的删除(就是删除表)

    -- 语法:

    DROP TABLE 库名.表名;

    --删除classb表
    DROP TABLE test.`classb`;

    表中数据的操作

    1、往表中插入数据

    -- 语法

    INSERT INTO 库名.表名(字段名1,字段名2)

    VALUES(字段值1,字段值2);

    -- 往表zhaosheng3种插入一条数据,学号为3,姓名为郑爽,班号为1,
    zsbh字段的值为4
    
    -- 方法一、
    INSERT INTO test.`zhaosheng3`
    VALUES(3,"郑爽",1,4);
    
    -- 方法二、
    INSERT INTO test.`zhaosheng4`(xuehao,xingming,banhao,zsbh)
    VALUES(4,"郑爽1",2,5);
    -- 往表temp种插入100数据,数据来源于employees表
    INSERT INTO hrdb.`temp` SELECT employee_id,first_name,salary 
    FROM hrdb.`employees` LIMIT 100; 
     -- limit 限制,limit 100,取前100条数据
    -- select子句的字段数量、数据类型需要和insert子句中的对应

    2、修改表中的数据

    语法:

    UPDATE 库名.表名

    SET 字段名1=新字段值1

    WHERE 字段名2=字段值2;

    2.1 修改单字段数据

    -- 修改student数据库表score中的数据,修改编号为1的记录的姓名为孙琦
    UPDATE
    student.`score` SET NAME="孙琦" WHERE id=1;

    2.2 修改多字段数据

    -- 修改student数据库score 表中数据,修改姓名为李四的记录,将语文成绩修改为81,英语成绩修改为90
    UPDATE
    student.`score` SET chinese=81,english=90 WHERE NAME="李四";

    2.3 修改多条记录的数据

    -- 修改student数据库score 表中数据,修改语文成绩大于80的记录,将语文成绩修改为100
    UPDATE student.`score`
    SET chinese=100
    WHERE chinese>80;

    3.删除表中的数据

     3.1删行

    -- 方法一:

    -- 语法:

    DELETE FROM 库名.表名 WHERE 字段名1=字段值1;(删除指定数据)

    -- 重点说明:删除表中数据时,如果不加where默认删除表中所有数据(清空表)

    -- 重点说明:使用delete删除表中数据时,delete后不能跟*号,delete不能和*号搭配使用。

    -- 删除student库score表中english成绩为84
    DELETE FROM student.`score`
    WHERE english=84;

    3.2删全表

    清空score表中所有记录
    方法一
    DELETE FROM student.`score`;
    
    方法二
    TRUNCATE student.`score`;
    TRUNCATE school.`test`;

    -- TRUNCATE 删除的意思,使用truncate删除的数据,无法恢复,

    -- truncate不能和from、where配合使用

    4、查询表中的数据(重中之重)

    4.1 查询单个表中的数据

    4.1.1结构化查询语言-SQL语言

    结构化查询语言(Structured QUERY Language或简称为SQL),即SQL语言,是一种应用

    最为广泛的关系数据库语言,该语言定义了操作关系数据库的标准语法,几乎所有的关系

    数据库管理系统都支持SQL语言。【关系型数据库:mysql、oracle、SQL server、DB2、

    sybase】

    SQL语言分类:

    下面的五大分类要能讲出来

    • DDL(Data Definition Language)(数据定义语言) - Create、Alter、Drop
    • DQL(Data QueryLanguage)(数据查询语言) - SELECT 查询语句
    • DML(Data Manipulation Language)(数据操纵语言) - Insert、Update、Delete
    • DTL(Data Transaction Language)(事务控制语言) - COMMIT(提交)、Rollback(回滚) 事务提交与回滚语句
    • DCL(Data Control Language)(数据控制语言) - GRANT(授权)、Revoke(回收权限) 授予权限与回收权限语句

    Select语句语法如下:

    (1)SELECT 字段列表

    (2)FROM 数据表

    (3)where条件

    (4)GROUP BY 分组字段

    (5)having条件

    (6)ORDER BY 排序字段  ASC | DESC  

    (7)LIMIT START,LENGTH;

    【划重点】:select语句中,各子句出现的顺序不能乱,否则报错

    -- 逻辑运算符:not 非,and 和,or 或

    -- not 表达式:取表达式计算结果相反的数据

    4.1.2普通查询

    -- 查询员工表(employees)中所有人员的所有信息
    SELECT * FROM hrdb.`employees`;
    -- 查询员工表中员工编号为101的员工的员工编号、工资
    SELECT employee_id,salary
    FROM hrdb.`employees`
    WHERE employee_id=101;

    4.1.3关键字in在查询语句中的用法

    说明:当查询条件给出的为多个类似的值时,可以使用关键字IN,不同值之间使用逗

    号隔开,

    -- 语法

    -- in(值1,值2...)

    -- 查询工资分别为9000、10000、18000的员工编号、工资
    SELECT employee_id,salary
    FROM hrdb.`employees`
    WHERE salary IN(9000,10000,18000);

    4.1.4关键字between...and...的用法

    说明:between...and...意思是在...和...之间

    -- between 值1 and 值2,意思是在值1和值2之间

    -- 查询工资在3000-6000之间的人员的工资、员工编号、职位编号
    SELECT
    salary,employee_id,job_id FROM hrdb.`employees` WHERE salary BETWEEN 3000 AND 6000; -- 查询结果包括边界3000和6000

    4.1.5 null关键字在查询语句中的用法

    -- 说明:null为空、不确定的意思

    -- 说明:

    -- is null代表为空的意思, is not null为非空的意思

    -- 判断某个字段值为空,不能使用=null

    -- 查询部门表中经理编号为空的部门的编号、部门名称、经理编号
    SELECT
    department_id,department_name,manager_id FROM hrdb.`departments` WHERE manager_id IS NULL;

    4.1.6聚合函数的用法

    -- 说明:聚合函数即分组函数,主要包括:求最大值max()函数、最小值min()函数、

    -- 平均值avg()函数、求和sum()函数

    -- 统计条数count()函数。

    -- 查询员工表中的最高工资、最低工资、平均工资、工资总和
    SELECT MAX(salary) AS 最高工资,MIN(salary) AS 最低工资,
    AVG(salary) AS 平均工资,SUM(salary) AS 工资之和
    FROM hrdb.`employees`; 
    -- as后为别名,as 是单词alias单词的简写,别名的意思
    -- as 可以省略

    4.1.7计数

    -- 查询员工表中的所有人员的工资之和以及人员的数量
    方法一
    SELECT SUM(salary),COUNT(employee_id)
    FROM hrdb.`employees`;
    
    方法二
    SELECT SUM(salary),COUNT(*)
    FROM hrdb.`employees`;-- *号代表所有记录
    
    方法三
    SELECT SUM(salary),COUNT(1)
    FROM hrdb.`employees`;-- *号代表所有记录
    -- 在部门表中,统计部门表中部门的数量
    SELECT COUNT(*) FROM hrdb.`departments`;
    SELECT COUNT(manager_id) FROM hrdb.`departments`;

    -- 总结:

    -- 使用count()函数统计表中记录的数量时:

    -- 使用*作为count()函数进行统计时,结果包含所有记录

    -- 使用单个字段作为count()函数的参数进行统计时,结果不统计字段值为null 的记录。

    4.1.8 分组查询关键字group by用法

     

    -- 说明:

    -- group by 字段名/聚合函数, 意思是先通过给定的【字段名/聚合函数】先进行分组,

    -- 再对分组后的数据进行分别处理【求和、求平均值、统计数量等】。

    -- 查询时,什么时候需要对数据进行分组?

    -- 一般查询问题为“每个...”,“各...”的时候,需要对数据进行分组

    -- 查询员工表中每个部门人员的平均工资,查询结果显示部门编号、平均工资
    SELECT department_id,AVG(salary)
    FROM hrdb.`employees`
    GROUP BY department_id; 
    -- 先对employees表的数据进行分组,再对每个组中的数据求平均值

    4.1.9 使用group by关键字进行多字段分组

    -- 查询不同部门中,不同职位的人员的平均工资,查询结果显示部门编号、职位编号、平均工资
    SELECT department_id,job_id,AVG(salary)
    FROM hrdb.`employees`
    GROUP BY department_id,job_id;


    4.1.10对group by分组后的结果数据使用having关键字进行过滤

    -- 说明:having关键字,可以对分组后的数据进行过滤,类似于where的作用,但又不同于where.

    -- having 后的过滤条件,可以跟字段,也可以跟聚合函数。

    -- 查询员工表中不同部门人员的平均工资,查询结果要求只显示平均工资高于12000的部门编号、平均工资
    SELECT department_id,AVG(salary)
    FROM hrdb.`employees`
    GROUP BY department_id
    HAVING AVG(salary) >12000;

    4.1.11 对查询结果使用order by关键字进行排序

    -- 说明:mysql中查询,查询结果默认按升序(从上到下,按从小到大)排列

    -- 升序排列:

    --不加排序关键字/使用关键字 ASC

    -- 降序排列:

    -- 使用关键字DESC

    -- 排序关键字使用语法:order by 字段名 [asc|desc],

    -- 意思是通过给定的字段名将查询结果进行排序(升序或者降序)

    -- 查询员工表中所有人员的工资,查询结果按工资高低升序排列,结果显示员工编号、工资
    
    方法一 默认升序排列
    SELECT employee_id,salary
    FROM hrdb.`employees`
    ORDER BY salary;
    
    方法二、使用升序排列关键字asc
    SELECT employee_id,salary
    FROM hrdb.`employees`
    ORDER BY salary ASC; -- asc用于升序排列

     

    4.1.12查询关键字limit的用法-分页查询

    -- 说明:limit限制的意思,在sql语句可以对查询结果进行过滤

    -- 在mysql中,limit m,n,意思是从第m+1条数据开始取数据,连续取n条数据,显示在查询结果中。

    -- 查询员工表中所有人员的工资,查询结果按工资高低降序排列,结果显示工资前四高的员工编号、工资
    SELECT employee_id,salary
    FROM hrdb.`employees`
    ORDER BY salary DESC
    LIMIT 4;
    -- 查询员工表中所有人员的工资,查询结果按工资高低降序排列,结果显示工资第四高的员工编号、工资
    SELECT employee_id,salary
    FROM hrdb.`employees`
    ORDER BY salary DESC
    LIMIT 3,1;  
    -- 从第3+1条(即第4条)数据开始取数据,只取1条

    MySQL 数据库 查 续

  • 相关阅读:
    R语言实战学习总结
    R语言学习笔记(十七):高级绘图ggplot2
    R语言学习笔记(十六):处理缺失值
    R语言学习笔记(十五):分类
    R语言学习笔记(十四):聚类分析
    R语言学习笔记(十三):时间序列
    R语言学习笔记(十二):主成分分析和因子分析
    转:网页不应该出现的特殊字符
    转:html常用网页特殊字符代码大全,值得收藏!
    转:LoadRunner 12 安装教程
  • 原文地址:https://www.cnblogs.com/hereisdavid/p/13471836.html
Copyright © 2011-2022 走看看