zoukankan      html  css  js  c++  java
  • MySQL的笔记(上)

    这里是MySQL部分的笔记,一些基本语法的演示,方便以后复习嗷~~

    ***修改密码<<忘性星人的必备

                     运行cmd

                      * 安装成功了打开cmd  --> mysql -uroot -p你的密码

                      * 修改mysql root用户密码

                         1) 停止mysql服务 运行输入services.msc 停止mysql服务

                                或者 cmd -->  net stop mysql

                         2) 在cmd下 输入 mysqld--skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)

                         3) 新打开cmd 输入mysql -u root -p 不需要密码

                         use mysql;

                         update user set password=password('abc') WHERE User='root';

                         4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程

                         5) 在服务管理页面 重启mysql 服务

                         密码修改完成

    ---------------------------------------------------------------------------------

    SQL四种语言: DDL、DML、DCL、TCL

    DDL**(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;      CREATE、 ALTER、DROP

    DML***(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);        INSERT、 UPDATE、 DELETE

    DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

    DQL*****(Data Query Language):数据查询语言,用来查询记录(数据)。 SELECT

    1、DDLData Definition Language数据库定义语言

    是对数据库的操作语言

    关键字:CREATE   ALTER DROP TRUNCATE COMMENT RENAME

    1、创建数据库

    1 create database mydb1;
    2 Create database mydb2 character set gbk;
    3 Create database mydb3 character set gbk COLLATE gbk_chinese_ci;

    2、查询数据库

    -- 查看当前数据库服务器中的所有数据库
    show databases;
    -- 查看前面创建的mydb2数据库的定义信息
    Show  create  database mydb2;
    -- 删除前面创建的mydb3数据库
    Drop database mydb3;

    3、修改数据库

    --  查看服务器中的数据库,并把mydb2的字符集修改为utf8;
     alter database mydb2 character set utf8;

    4、删除数据库

    drop database mydb3;

    5、其他

    -- 查看当前使用的数据库
    select database();
    -- 切换数据库
    use mydb2;
     1 -- 当前数据库中的所有表
     2 SHOW TABLES;
     3 -- 查看表的字段信息
     4 DESC employee;
     5 -- 在上面员工表的基本上增加一个image列。
     6 ALTER TABLE employee ADD image blob;
     7 -- 修改job列,使其长度为60。
     8 ALTER TABLE employee MODIFY job varchar(60);
     9 -- 删除image列,一次只能删一列。
    10 ALTER TABLE employee DROP image;
    11 -- 表名改为user。
    12 RENAME TABLE employee TO user;
    13 -- 查看表格的创建细节
    14 SHOW CREATE TABLE user;
    15 -- 修改表的字符集为gbk
    16 ALTER TABLE user CHARACTER SET gbk;
    17 -- 列名name修改为username
    18 ALTER TABLE user CHANGE name username varchar(100);
    19 
    20 -- 删除表
    21 DROP TABLE user ;

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

    DML是对表中的数据进行增、删、改的操作。

    关键字:SELECT INSERT UPDATE DELETE

    1、查询

    SELECT * FROM 表名;

     

    2、插入数据

     1 create table emp(
     2 id int,
     3 name varchar(100),
     4 gender varchar(10),
     5 birthday date,
     6 salary float(10,2),
     7 entry_date date,
     8 resume text
     9 );
    10
    11 INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    12 VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');
    13 
    14 INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    15 VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
    16 
    17 INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    18 VALUES(3,'wangwu','male','1995-5-10',10000,'2015-5-5','good boy');
    19 
    20 批量插入:
    21 INSERT INTO emp VALUES
    22 (4,'zs','m','2015-09-01',10000,'2015-09-01',NULL),
    23 (5,'li','m','2015-09-01',10000,'2015-09-01',NULL),
    24 (6,'ww','m','2015-09-01',10000,'2015-09-01',NULL);

    3、修改数据

    -- 将所有员工薪水修改为5000元。
    UPDATE emp SET salary=5000 
    -- 将姓名为’zs’的员工薪水修改为3000元。
    UPDATE emp SET salary=3000 WHERE name=’ zhangsan’;
    -- 将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
     UPDATE emp SET salary=4000,gender='female' WHERE name='lisi';
    -- 将wu的薪水在原有基础上增加1000元。
     UPDATE emp SET salary=salary+1000 WHERE gender='male';    

    4、删除数据

    1 -- 删除表中名称为’zs’的记录。
    2 DELETE FROM emp WHERE name=‘zs’;
    3 -- 删除表中所有记录。
    4 DELETE FROM emp;
    5 -- 使用truncate删除表中记录。
    6 TRUNCATE TABLE emp;

    ATTENTION!

    DELETE 删除表中的数据,表结构还在;删除后的数据可以找回

    TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。

    3、DQL

    数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。

    1、基础查询

    SELECT * FROM stu;
    SELECT sid, sname, age FROM stu;

    2、条件查询

     =、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL;  IS NOT NULLAND; OR; NOT;

    -- 查询性别为女,并且年龄50的记录
    SELECT * FROM stu 
    WHERE gender='female' AND ge<50;
    
    -- 查询学号为S_1001,或者姓名为liSi的记录
    SELECT * FROM stu 
    WHERE sid ='S_1001' OR sname='liSi';
    
    -- 查询学号为S_1001,S_1002,S_1003的记录
    SELECT * FROM stu 
    WHERE sid IN ('S_1001','S_1002','S_1003');
    
    -- 查询学号不是S_1001,S_1002,S_1003的记录
    SELECT * FROM tab_student 
    WHERE s_number NOT IN ('S_1001','S_1002','S_1003');
    
    -- 查询年龄为null的记录
    SELECT * FROM stu
    WHERE age IS NULL;
    
    -- 查询年龄在20到40之间的学生记录
    SELECT * 
    FROM stu
    WHERE age>=20 AND age<=40;
    -- 或者
    SELECT * 
    FROM stu 
    WHERE age BETWEEN 20 AND 40;
    
    --  查询性别非男的学生记录
    SELECT * 
    FROM stu
    WHERE gender!='male';
    -- 或者
    SELECT * 
    FROM stu
    WHERE gender<>'male';
    -- 或者
    SELECT * 
    FROM stu
    WHERE NOT gender='male';
    
    -- 查询姓名不为null的学生记录
    SELECT * 
    FROM stu
    WHERE sname IS NOT NULL;
    -- 或者
    SELECT * 
    FROM stu
    WHERE NOT sname IS NULL;

    3、模糊查询

    关键字 LIKE 

    通配符:

    _ 任意一个字符

     %:任意0~n个字符

    -- 查询姓名由5个字母构成的学生记录
    SELECT * 
    FROM stu
    WHERE sname LIKE '_____';
    
    -- 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
    SELECT * 
    FROM stu
    WHERE sname LIKE '____i';
    
    -- 查询姓名以“z”开头的学生记录
    SELECT * 
    FROM stu
    WHERE sname LIKE 'z%';
    
    -- 查询姓名中第2个字母为“i”的学生记录
    SELECT * 
    FROM stu
    WHERE sname LIKE '_i%';
    
    -- 查询姓名中包含“a”字母的学生记录
    SELECT * 
    FROM stu
    WHERE sname LIKE '%a%';

     

    4、字段控制查询

    -- ---------1、去除重复数据 DISTINCT
    SELECT DISTINCT sal FROM emp;
    
    -- --------- 2、计算之和 //注意类型必须都是INT否则报错
    SELECT *,sal+comm FROM emp;
    
    -- --------- 3、如果是null与数值相加还是null 将null值设为0
    SELECT *,sal+IFNULL(comm,0) FROM emp;
    
    -- --------- 4、给列添加别名
    SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
    -- 给列起别名时,是可以省略AS关键字的:
    SELECT *,sal+IFNULL(comm,0)  total FROM emp;

     

    5、排序

    语法: order by 列名 asc(默认) desc

    -- 查询所有学生记录,按年龄降序排序
    SELECT *
    FROM stu
    ORDER BY age DESC;
    -- 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
    SELECT * FROM emp
    ORDER BY sal DESC,empno ASC;

     

    6、聚合函数

    聚合函数是用来做纵向运算的函数:

      COUNT():统计指定列不为NULL的记录行数;

      MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

      MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

      SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

      AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

    -- ----------当需要纵向统计时可以使用COUNT()。
    --    查询emp表中记录数:
    SELECT COUNT(*) AS cnt FROM emp;
    
    -- 查询emp表中有佣金的人数:
    SELECT COUNT(comm) cnt FROM emp;
    注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。
    
    --     查询emp表中月薪大于2500的人数:
    SELECT COUNT(*) FROM emp
    WHERE sal > 2500;
    --     统计月薪与佣金之和大于2500元的人数:
    SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;
    
    --     查询有佣金的人数,有领导的人数:
    SELECT COUNT(comm), COUNT(mgr) FROM emp;
    
    --  ------------------ SUM和AVG
    当需要纵向求和时使用sum()函数。
    --     查询所有雇员月薪和:
    SELECT SUM(sal) FROM emp;
    
    --     查询所有雇员月薪和,以及所有雇员佣金和:
    SELECT SUM(sal), SUM(comm) FROM emp;
    
    --     查询所有雇员月薪+佣金和:
    SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
    
    --     统计所有员工平均工资:
    SELECT AVG(sal) FROM emp;
    
    -- -------------------- MAX和MIN
    --     查询最高工资和最低工资:
    SELECT MAX(sal), MIN(sal) FROM emp;

     

    7、 分组查询

    --     查询每个部门的部门编号和每个部门的工资和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno;
    
    --     查询每个部门的部门编号以及每个部门的人数:
    SELECT deptno,COUNT(*)
    FROM emp
    GROUP BY deptno;
    
    --     查询每个部门的部门编号以及每个部门工资大于1500的人数:
    SELECT deptno,COUNT(*)
    FROM emp
    WHERE sal>1500
    GROUP BY deptno;
    
    --  -------------------------- HAVING子句
    --     查询工资总和大于9000的部门编号以及工资和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 9000;

     Attention:

    having与where的区别:

    1.having是在分组后对数据进行过滤.  where是在分组前对数据进行过滤

    2.having后面可以使用聚合函数(统计函数) where后面不可以使用聚合函数。

    3.WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

     8、LIMIT

    LIMIT用来限定查询结果的起始行,以及总行数。

    -- 查询5行记录,起始行从0开始
    SELECT * FROM emp LIMIT 0, 5;
    
    -- 注意,起始行从0开始,即第一行开始!
  • 相关阅读:
    Informatica_(6)性能调优
    Informatica_(5)高级应用
    Informatica_(4)工作流
    Informatica_(3)组件
    Informatica_(2)第一个例子
    Informatica_(1)安装
    Linux_(4)Shell编程(下)
    Linux_(3)Shell编程(上)
    Linux_(2)基本命令(下)
    B
  • 原文地址:https://www.cnblogs.com/gugumiao/p/6839755.html
Copyright © 2011-2022 走看看