MySQL学习笔记(一) 青铜

数据库介绍


    什么是数据库:数据库是是按照必定的数据结构来组织、存储和管理数据的仓库mysql

常见的数据库


        Oracle
            运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。
        DB2
            速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。
        MySQL
            开源,体积小,速度快。适用于于中小型企业领域。
        SQL Server
            全面,效率高,界面友好,操做容易,可是不跨平台。适用于于中小型企业领域。sql

经常使用数据库命令:

        建立数据库:        create database 数据库名称;
        删除数据库:        drop database 数据库名称;
        查看数据库:        show databases;
        使用数据库:         use 数据库名;数据库

 

   SQL数据类型:     

数值类型:安全

字符串类型:
   日期和时间类型: 数据结构

经常使用数据类型


    double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
    char:固定长度字符串类型; char(10)  'abc       '
    varchar:可变长度字符串类型;varchar(10) 'abc'
    text:字符串类型;
    blob:二进制类型;
    date:日期类型,格式为:yyyy-MM-dd;
    time:时间类型,格式为:hh:mm:ss
    datetime:日期时间类型 yyyy-MM-dd hh:mm:ss函数

在mysql中,字符串类型和日期类型都要用单引号括起来。'MySql'  '2020-01-01'性能

sql功能分类:

        DDL:用来定义数据库对象:建立库,表,列等。spa

        DML:用来操做数据库表中的记录code

        DQL:用来查询数据orm

        DCL:用来定义访问权限和安全级别

DDL(和数据库相关)

建立数据库:                            create database 数据库名  character set utf8;
修改数据库:                            alter database 数据库名 charactor set gbk;
添加一列:                              ALTER TABLE 表名 ADD 列名 数据类型;
修改一个表的字段类型:                   ALTER TABLE 表名 MODIFY 字段名  数据类型;
修改表名:                              RENAME TABLE 原始表名 TO  要修改的表名; 
修改表的字符集:                         ALTER TABLE 表名 CHARACTER SET 字符集名称;
修改表的列名:                           ALTER TABLE 表名 CHANGE 原始列名 新列名 数据类型;
查看表的字段信息:                        DESC 表名;
查看表的建立细节:                         SHOW CREATE TABLE 表名;
删除一列:                                 ALTER TABLE 表名 DROP 字段名;
删除表:                                   DROP TABLE 表名;

DML(必须会写)

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

查询表中的全部数据:SELECT * FROM 表名;
    插入操做:INSERT INTO 表名(列名1,列名2 ...)VALUE (列值1,列值2...);
        注意事项
            列名与列值的类型、个数、顺序要一一对应。
            值不要超出列定义的长度。
            插入的日期和字符同样,都使用引号括起来。

        批量插入:INSERT INTO 表名(列名1,列名2 ...)VALUES (列值1,列值2...),(列值1,列值2...);
    更新操做:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值

把全部学生的分数改成90:update students set  score=90
把姓名为zs的学生分数改成60:update student set score=60 where name='zs';
把姓名为李四的年龄改成20和分数改成70:update student set age=20,score=70 where name='ls';
把wc的年龄在原来基础上加1岁:update students set age=age+1 where name='wc';


    删除操做
       1. DELETE FROM 表名 【WHERE 列名=值】
       2.  TRUNCATE TABLE 表名;
        
DELETED 与TRUNCATE的区别:
            DELETE 删除表中的数据,表结构还在;删除后的数据能够找回
            TRUNCATE 删除是把表直接DROP掉,而后再建立一个一样的新表。删除的数据不能找回。执行速度比DELETE快。

 

DQL:

查询全部列:SELECT * FROM 表名;
    

结果集:数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
            1.经过查询语句查询出来的数据以表的形式展现咱们称这个表为虚拟结果集。存放在内存中。
           2. 查询返回的结果集是一张虚拟表。
  

 查询指定列的数据: SELECT 列名1,列表2... FROM 表名;
 
     

 //查询性别为男,而且年龄为20的学生记录
       SELECT * FROM students WHERE gender='男' AND age=20;
  //查询学号为1001 或者 名为zs的记录
       SELECT * FROM students WHERE id ='1001' OR name='zs';
  //查询学号为1001,1002,1003的记录
       SELECT * FROM students WHERE id='1001' OR id='1002' OR 1001='1003';
       SELECT * FROM students WHERE id  IN('1001','1002','1003');
       select * from student where id BETWEEN 1001 and 1003;
  //查询年龄为null的记录
       SELECT * FROM students WHERE age IS NULL;
  //查询年龄在18到20之间的学生记录
       SELECT * FROM students WHERE age>=18 AND age<=20;
       SELECT * FROM students WHERE age BETWEEN 18 AND 20;
  //查询性别非男的学生记录
       SELECT * FROM students WHERE gender !='男';
   //查询姓名不为null的学生记录
       SELECT * FROM students WHERE  name IS NOT  NULL;

模糊查询:

    1.根据指定的关键进行查询
    2.使用LIKE关键字后跟通配符
    3.通配符
        _  :任意一个字符
        %:任意0~n个字符
    使用:

//查询姓名由5个字母构成的学生记录
	SELECT * FROM students WHERE name LIKE '_____';
	//模糊查询必须使用LIKE关键字。其中 “_”匹配任意一个字母,5个“_”表示5个任意字母。
//查询姓名由5个字母构成,而且第5个字母为“s”的学生记录
	SELECT * FROM students WHERE name LIKE '____s';
//查询姓名以“m”开头的学生记录
	SELECT * FROM students WHERE name LIKE 'm%';
	//其中“%”匹配0~n个任何字母。
//查询姓名中第2个字母为“u”的学生记录
	SELECT * FROM students WHERE name LIKE '_u%';
//查询姓名中包含“s”字母的学生记录
	SELECT * FROM stu WHERE name LIKE '%s%';

字段控制查询

  • DISTINCT 去除重复记录:                         
  SELECT DISTINCT name FROM students;
  • IFNULL把NULL转换成数值0

SELECT *,字段1+字段2 FROM 表名;

把查询字段的结果进行运算,必须都要是数据型,但列有不少记录的值为NULL,由于任何东西与NULL相加结果仍是NULL,因此结算结果可能会出现NULL。

把NULL转换成数值0的函数IFNULL
SELECT *,age+IFNULL(score,0) FROM students;

排序

对查询的结果进行排序:
  使用关键字ORDER BY

        升序ASC:从小到大  默认
        降序DESC:从大到小

//使用
	//对全部员工的薪水进行排序
		SELECT *FROM employee ORDER BY salary ASC;
	//查询全部学生记录,按年龄降序排序
        SELECT *FROM student ORDER BY age DESC;
	//查询全部雇员,按月薪降序排序,若是月薪相同时,按编号升序排序
		SELECT * FROM employee ORDER BY salary DESC, id ASC;

经常使用聚合函数:

COUNT():统计指定列不为NULL的记录行数;
    MAX():计算指定列的最大值,若是指定列是字符串类型,那么使用字符串排序运算;
    MIN():计算指定列的最小值,若是指定列是字符串类型,那么使用字符串排序运算;
    SUM():计算指定列的数值和,若是指定列类型不是数值类型,那么计算结果为0;
    AVG():计算指定列的平均值,若是指定列类型不是数值类型,那么计算结果为0;

//使用COUNT
		//查询employee表中记录数:
			SELECT COUNT(*) AS total_record FROM employee;
		//查询员工表中有绩效的人数
			SELECT COUNT(performance)  FROM employee;
		//查询员工表中月薪大于2500的人数:
			SELECT COUNT(*) FROM employee WHERE salary > 2500;
		//统计月薪与绩效之和大于5000元的人数:
			SELECT COUNT(*)  FROM employee WHERE salary+IFNULL(performance,0) > 5000;
		//查询有绩效的人数,和有管理费的人数:
			SELECT COUNT(performance), COUNT(manage) FROM employee;
	//SUM和AVG
		//查询全部雇员月薪和:
			SELECT SUM(salary) FROM employee;
		//查询全部雇员月薪和,以及全部雇员绩效和
			SELECT SUM(salary), SUM(performance) FROM employee;
		//查询全部雇员月薪+绩效和:
			SELECT SUM(salary+IFNULL(performance,0)) FROM employee;
		//统计全部员工平均工资:
			SELECT AVG(salary) FROM employee;
	//MAX和MIN
		//查询最高工资和最低工资:
			SELECT MAX(salary), MIN(salary) FROM employee;
相关文章
相关标签/搜索