zoukankan      html  css  js  c++  java
  • MySQL基本查询语句

    1 数据库入门

    1.1 引入

    方式一: 数据放到内存

    优点:

    1)擦写数据的效率很高!

    缺点:

    1)无法永久保存,当程序关闭了,数据丢失

    方式二: 数据放到普通文件

    优点:

    1)可以永久保存

    缺点:

    1)频繁地进行IO操作,效率比较低

    2)查询数据不方便的!!!

    方式三: 数据放到数据库软件

    优点:

        1)数据永久保存下来

    2)查询数据非常方便的!!

    3)效率不能低

    1.2 市面上常见的数据库软件

    数据库软件,存储和管理数据的仓库。

    Oracle: 是甲骨文公司的产品。满足中大型应用。和java语言兼容性非常好的。

    SQL Server: 是微软公司的产品。和net平台(c#语言)兼容最好。

    DB2: IBM的产品。

    mysql:开源的数据库产品。和java语言兼容非常好。满足中小型应用。

    mangoDBnoSQL数据库

    mysql: 满足中小型应用

    oracle:满足中大小应用

    1.3 mysql数据库基本使用

    C:UsersAPPle>mysql -u root -p

    Enter password: ****

    Welcome to the MySQL monitor.  Commands end with ; or g.

    Your MySQL connection id is 12

    Server version: 5.5.40 MySQL Community Server (GPL)

    Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    数据定义语言(DDL),例如:CREATEDROPALTER等语句。

    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

    数据查询语言(DQL),例如:SELECT语句。(一般不会单独归于一类,因为只有一个语句)。

    数据控制语言(DCL),例如:GRANTREVOKE等语句。

    事务控制语言(TCL),例如:COMMITROLLBACK等语句。

    SQL语言包括四类种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)还有事务控制语言(TCL)。

    2 管理数据库

    2.1 查看所有数据库

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |         数据库的元数据

    | mysql              |        数据库用户信息或软件配置信息

    | performance_schema |        数据库软件运行的性能数据

    | test               |        测试数据库

    +--------------------+

    4 rows in set (0.00 sec)

    2.2 创建新的数据库

    create database user;

    指定字符集  create database user default character set gbk;

    2.3 修改数据库

    修复数据库的字符集    alter database user default character set utf8;

    2.4删除数据库

    drop database admin_user;

    3 管理表

    操作表之前,需要切换数据库:  use 数据库名称     例如  use  admin_user;

    3.1 创建新的表(create table)

    create table student(id int,name varchar(20),age int);

    create table 表名(字段名称 字段类型,字段名称 字段类型.....);

    3.2 修改表(alter table

    添加字段:alter table student add column gender varchar(1);

    修改字段类型:alter table student modify column gender varchar(2);

    修改字段名称:alter table student change column gender sex varchar(2);

    删除字段:alter table student drop column age;

    修改表名称:alter table student rename to teacher;

    3.3 查看表

    desc student;

    show tables: 查看当前数据库的所有表

    3.4 删除表

    drop table teacher;

    4 管理数据

    1.1插入数据(insert into

    需求: 往学生表插入数据

    INSERT INTO student VALUES(1,'张三',20);

    1)插入的字段值顺序一定是按照表的字段顺序

    INSERT INTO student VALUES('张三',1,20);报错

    2)字段的数据一定要和值的数量要一致

    INSERT INTO student VALUES(2,20); 报错

    3)插入部分字段

    INSERT INTO student(id,NAME) VALUES(2,'李四');

    1.2 修改数据(update)

    需求: 修改学生表

    1)批量操作(不建议经常使用这种)

    UPDATE student SET NAME='张三';

    2)按条件修改,修改一个字段

    需求: 修改id2的学生姓名

    UPDATE student SET NAME='李四' WHERE id=2;

    需求: 修改id1的学生姓名和年龄

    3)修改多个字段

    UPDATE student SET NAME='王五',age=40 WHERE id=1;

    1.3 删除数据(delete from

     1) 全表数据删除

    DELETE FROM student;

    2)按条件删除数据

    DELETE FROM student WHERE id=2;

    3)truncate table也可以删除全表数据

    TRUNCATE TABLE student;

    注意:delete from truncate table 的区别?

    1delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除

    2delete from删除的数据可以回滚,truncate table删除的数据不能回滚。

    3delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置

    truncate table student where id=1; 错误的语法

    1.4 查看所有数据(重点中的重点)

    SELECT * FROM student;

    5 查询数据(重点)

    5.1 查询所有字段  SELECT * FROM student;

    5.2 查询指定的字段  SELECT id,NAME FROM student;

    5.3 查询时指定别名(AS可以省略) SELECT id AS '编号',NAME AS '姓名' FROM student;

    5.4 查询时添加常量列

    临时使用的列可以通过查询时动态添加进去

    需求: 查询学生数据时添加一个"班级"列。值为“java就业班”

    SELECT id AS '编号',NAME AS '姓名','java就业班' AS '班级' FROM student;

    5.5 查询时合并列

    需求: 查询每个学生的总分。

    SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student;

    注意: 合并列的字段必须是数值类型的字段。非数值类型合并没有效果

    SELECT NAME AS '姓名',(servlet+NAME) FROM student;

    5.6 查询去除重复记录

    需求: 查询有哪些的地区学生

    SELECT DISTINCT address FROM student;

    另一种语法

    SELECT DISTINCT(address) FROM student;

    5.7 条件查询

    1)逻辑条件: and()     or(或)

       当出现两个或两个以上的条件,那么这两个条件直接一定会存在逻辑关系。要么是与关系,要么或关系

    需求:查询学生的id1,且姓名为张三的学生 

    SELECT * FROM student WHERE id=1 AND NAME='张三'; -- (交集,结果数小于或等于任何一个条件的结果数)

    需求:查询学生的id2,或姓名为张三的学生

    SELECT * FROM student WHERE id=2 OR NAME='张三';  -- (并集,结果数一定会大于或等于任何一个条件的结果数)

    2)比较条件: >  <  >=   <=  =  <>  (between and)

    需求: 查询servlet分数大于80分的学生

    SELECT * FROM student WHERE servlet>80;

    需求:查询mysql分数小于或等于85分的学生

    SELECT * FROM student WHERE mysql<=85;

    SELECT * FROM student WHERE mysql<85 OR mysql=85;

    需求: 查询servlet分数大于或等于80分,且小于或等于85分的学生

    SELECT * FROM student WHERE servlet>=80 AND servlet<=85;

    上面sql代替的语法

    SELECT * FROM student WHERE servlet BETWEEN 80 AND 85; -- ..。之间(包前包后)

    需求:查询年龄不等于30岁的学生

    SELECT * FROM student WHERE age<>30;

    3)判空条件: is null , is not null, ='' <>''

    null: 表示没有数据   is null   =''

    空字符:有数据      is not null     <>''

    需求:查询没有性别数据的学生(数据‘男’或‘女’)

    SELECT * FROM student WHERE gender IS NULL OR gender='';

    需求: 查询有性别数据的学生

    SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';

    4)模糊条件: like

    模糊替代符号:

    %: 替代任意个字符

     _: 替代一个字符

    需求: 查询姓‘李’的学生

    SELECT * FROM student WHERE NAME LIKE '%';

    需求: 查询姓名中包含‘四’字的学生

    SELECT * FROM student WHERE NAME LIKE '%%';

    需求:查询姓‘李’,全名只有两个字的学生

    SELECT * FROM student WHERE NAME LIKE '_';

    5.8 聚合查询

    用于统计结果

    max()  min()  avg()  count()

    需求: 查询servlet的最高分

    max() 取最大值

    SELECT MAX(servlet) FROM student;

    需求: 查询mysql的最低分

    min(): 取最小值

    SELECT MIN(mysql) FROM student;

    需求: 查询servlt的平均分

    avg(): 平均函数

    SELECT AVG(servlet) FROM student;

    需求:查询当前有几个学生

    count(): 统计表的记录数量

    SELECT COUNT(*) FROM student;

     count(id): 统计有值的id字段的数量(排除null的数据)

    SELECT COUNT(id) FROM student;

    使用count统计表的数据,不要使用存在null的字段

    SELECT COUNT(gender) FROM student;

    5.9 分页查询

    limit 起始行数,查询的行数

    起始行数从0开始

    SELECT * FROM student;

    需求:学生共20条数据,每页显示5条,共4

    看第3(1115)的学生数据sqlselect * from student limit 10,5;

    看第4(1620)的学生数据sql: select * from student limit 15,5;

      知道: 当前页码,每页显示条数

    结论分页查询当前页数据的sqlselect * from student limit (当前页码-1)*每页显示条数,每页显示条数;

    需求: 查询第1,2条数据

    SELECT * FROM student LIMIT 0,2;

    需求: 查询第3,4条数据

    SELECT * FROM student LIMIT 2,2;

    需求:查询第5,6条数据

    SELECT * FROM student LIMIT 4,2;

    5.10 查询后排序(order by注意:orderby一般都放在sql语句的最后

    desc: 降序。数值从大到小,字母z-a

    asc: 升序。数值从小到大,字母a-z

    默认情况下,按照插入的顺序排序

    SELECT * FROM student;

    需求:按照id的升序排序

    SELECT * FROM student ORDER BY id ASC;

    需求: 按照servlet成绩降序排序

    SELECT * FROM student ORDER BY servlet DESC;

    多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序

    需求: 按照age升序,按照servlet成绩升序排序

    SELECT * FROM student ORDER BY age ASC,servlet ASC;

    select * from student order by username asc;

    5.11 分组查询(group by)

    需求: 查询每个地区有多少人

    预期结果:

            3

            1

    SELECT address,COUNT(*) FROM student;

    1)对地区进行分组   2)在分组的基础可以进行统计,统计的是每组的数据

    SELECT address,COUNT(*) FROM student GROUP BY address;

    需求: 统计男女的人数

    注意:order by 必须放在分组之后; where条件必须放在group by分组之前

    SELECT gender,COUNT(*) FROM student  WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;

    5.12 分组查询后筛选(having)

    需求: 查询哪些地区的人数大于2个的地区

    1)查询哪些地区多少人  2)筛选人数大于2的地区

    注意: having使用在group by分组之后的,对分组后的条件进行筛选

    SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2 ;

    6、字段类型

    char(20) vs varchar(20)

    char(20): 固定长度的字符串。不管实际存储的数据的大小,一定占用20个字符空间

    varchar(20): 可变长度的字符串。占用的空间大小就是实际存储的数据大小。

    int vs int(4)

    int: 默认最多11位,长度根据实际存储的数值的长度

    int(4): 固定的数组长度

    CREATE TABLE test(

    id1 INT,

    id2 INT(4) ZEROFILL -- zerofill: 零填充

    )

    INSERT INTO test VALUES(1,1);

    SELECT * FROM test;

    date vs datetime vs timestamp

    date: 日期

    datetime: 日期+时间

    timestamp: 时间戳,用于记录当前数据的插入或更新的时间

    CREATE TABLE test_date(

    date1 DATE,

    date2 DATETIME,

    date3 TIMESTAMP

    )

    INSERT INTO test_date(date1,date2) VALUES('2018-06-17 17:35:45','2018-06-17 17:35:45');

    SELECT * FROM test_date;

    UPDATE test_date SET date2='2018-06-17 17:40:45';

    分类

    数据类型

    说明

    数值类型

    BIT(M)  bit  bit(8)

    TINYINT [UNSIGNED] [ZEROFILL]  byte

    BOOL,BOOLEAN   boolean

    SMALLINT [UNSIGNED] [ZEROFILL] short

    INT [UNSIGNED] [ZEROFILL] int

    BIGINT [UNSIGNED] [ZEROFILL] long

    FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]  float

    DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] double

    位类型。M指定位数,默认值1,范围1-64

    带符号的范围是-128到127。无符号0到255。

    使用0或1表示真或假

    2的16次方

    2的32次方

    2的64次方

    M指定显示长度,d指定小数位数

    表示比float精度更大的小数

    文本、二进制类型

    CHAR(size) char(20)  max—255   abc            

    VARCHAR(size)  varchar(20) 65535   abcde String

    BLOB   LONGBLOB  大的二进制数据

    TEXT(clob)          LONGTEXT(longclob)  大文本数据

    固定长度字符串

    可变长度字符串

    二进制数据

    大文本

    时间日期

    DATE/DATETIME/TimeStamp

    日期类型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间

  • 相关阅读:
    微信小程序--数据存储
    微信小程序---setData
    关于MVC中 服务器无法在发送 HTTP 标头之后修改 cookie此类问题的解决
    获取Web项目中的控制器类以及类中Action方法
    使用Attribute限制Action只接受Ajax请求
    Dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY
    根据数据库反向生成PD
    Git常用命令大全,迅速提升你的Git水平
    官方VisualStudio.gitignore配置
    Win10-1909删除自带的微软输入法,添加美式键盘
  • 原文地址:https://www.cnblogs.com/lldsgj/p/10801286.html
Copyright © 2011-2022 走看看