zoukankan      html  css  js  c++  java
  • MYSQL

    数据库概述
    数据库(DataBase:DB)数据库是按照数据数据结构,存储,组织和管理数据的仓库
    ps:存储和管理的仓库相当于就在磁盘上操作文件

    数据库管理系统:
    是专门用于管理数据库,是一个计算机软件,提供对数据库的建立,维护,查询和统计等操作

    ps:我们一般说的数据库都是数据库服务器:DBMS,只的是数据库的服务端
    ---------------------------------------------------------------------------------------------------
    什么是非关系型数据库?
    非关系型数据库,是指采用了没有特定关系模型来组织数据的数据库。
    NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析

    随着大数据的不断发展,此时出现了一种数据库非关系型数据库,NOSQL数据库
    常见非关系型数据库:
    键值存储的数据库:Oracle DBD Redis BeansDB
    列式存储的数据库:HBase Riak
    文档存储的数据库 MongoDB CouchDB
    图形存储的数据路 Neo4J InfoGrid
    ---------------------------------------------------------------------------------------------------
    什么是关系型数据库?
    关系型数据库是依据关系模型来创建的数据库。
    所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
    关系型数据可以很好地存储一些关系模型的数据,比如一个老师对应多个学生的数据(“多对多”),一本书对应多个作者(“一对多”),一本书对应一个出版日期(“一对一”)
    关系模型是我们生活中能经常遇见的模型,存储这类数据一般用关系型数据库
    关系模型包括数据结构(数据存储的问题,二维表)、操作指令集合(SQL语句)、完整性约束(表内数据约束、表与表之间的约束)。

    关系型数据库
    MySQL是一个典型的关系型数据库
    SQL Server 微软
    DB2 IMB
    Oracle 甲骨文(Oracle)
    Oracle:运行稳定,可移植性高,功能齐全,性能超群,适用于大企业(付费)
    DB2:速度快,可靠性好,适用于海量数据,恢复性极强,适用于银行,电力,金融(付费)
    SQL Server:全面,效率高,界面友好,操作方便,但是不跨平台,中小企业使用(免费,企业版收费)
    MySQL:开源,体积小,速度快,全面支持SQL,适用于中小企业(完全免费)

    SQL:结构化查询语言是关系型数据库的标准语言
    特点: 简单,灵活,功能强大
    ---------------------------------------------------------------------------------------------------
    SQL语句被分为6个部分

    1.数据查询语言(DQL)
    其语句也被称为"数据检索语句",用表中获取数据,确定数据怎样在应用程序显示
    SELECT WHERE [ORDER BY] [GRPUP BY] HAVING 关键字
    2.数据操作语言(DML)
    操作数据库使用:INSERT UDDATE和DELETE一般都是动词
    3.事物处理语言(TPL)
    它的语句是确保被DML语言可以影响其行为 BEDIN COMMIT 和 ROLLBACK
    4.数据控制语言(DCL)
    控制数据的操作 GRANT REVOKE 对单个用户或用组的数据库访问
    5.数据定义语言(DDL)
    动词CREATE 和 DROP 创建一个表删除一个表
    DDL语言中也包含了查询中一部分
    6.指针(游标)控制语言(CCL)
    它可以操作数据空中的游标位置通过位置就可以进行单数的行的操作
    FETCH INTO 和 UPTDATE WHERE CURRENT
    ---------------------------------------------------------------------------------------------------
    书写SQL的规则:
    1.在数据库中 SQL语言大小不敏感 SELECT/select/SElecT
    ps:个人建议 大写
    2.SQL语句单行或多行书写
    3.在SQL语句汇总,关键不能多行或缩写
    4.为了可读性建议关键字大写 其他小写
    ---------------------------------------------------------------------------------------------------
    表的概念:
    MySQL是一种关系型数据库,关系型数据库最重要的概念就是表
    固定的列数和任何行数组成的关系 --> 表

    数据库中表 可以看做是一个 二维表(想象成二维数组) 每一行都是一个实体
    表中的列是表示属性 每一行的记录数据 就相当属性的值

    先以一个面向对象的思维来看待这张表
    public class Sutdent{
    private int stuNo;
    private String name;
    private int age;
    private int classNo;

    }
    Student stu = new Student();
    stu.setStuNo(10086);

    面向对象的思维 ---> 关系型数据库
    类 ---> 表
    属性 ---> 列(属性)
    对象 ---> 表中一行的数据
    我们是不能直接操作表的,因为表是存储到数据库,先连接数据库

    安装MySQL:
    如何卸载MySQL:
    360软件管家 --> 去卸载MySQL
    1.控制面板 --> 程序和功能 --> 卸载MySQL
    2.在我的电脑中 --> C:盘下有一个隐藏文件(ProgramData) -->文件夹中MySql文件夹删除
    3.
    就是由于卸载时有残余文件导致mysql安装失败。
    首先,卸载mysql,然后删除安装目录。
    接着,打开regedit.exe(cmd模式),删除以下注册表:
    HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
    HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL
    尝试着删除之后,安装成功。

    详细看安装文档

    登录MySQL:
    1.登录Mysql
    1.1直接通过CMD --> mysql -uroot -p
    1.2在开始菜单知道Mysql目录-->XXXX Client
    这个可以直接运行效果一样的

    常用命令:
    查看数据库中有哪些数据库
    show databases;
    使用哪个数据库
    use 对应的数据库名称
    得到一个打印结果Database changed --> 数据改变成功已经使用到所要使用的数据库
    查询对应数据库中的所有表
    show tables;
    创建自己的数据库
    create database 库的名称
    ps:1.系统库不要删除
    2.删库需要谨慎(从删库到跑路)-->一旦库没有了,那么其下的表就都没有了,表没有了数据就没有
    drop database 库的名称
    ps:只要是命令 希望各位大写
    因为是在控制台dos命令下,所以 方向键上或下 可以获取上次或下次书写的命令

    ps:MYSQL的存储引擎
    MYSQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中每一种技术都使用不同的存储机制
    ,索引技巧,锁定水平并且最终提供的功能也不相同
    MyISAM: 拥有较高的插入,查询数据,但是不支持事务,不支持外键
    InnoDB: 支持事务,支持外键,支持行锁定,性能低

    MySql中的常用类型
    整数类型是类型最常用那个

    MySQL存储一个整数 Java数据类型
    INT/INTEGER int/integer
    BIGINT long/Long
    MySQL以一个可选的显示宽度指示器对SQL中的标准进行扩展
    例如:
    指定一个字段的类型为INT(6),就可以保证所有包含的数字少于6个的
    值从数据中检锁出来时自动用空格填充
    ps:String.format("%02d",1/11) --> 01/ -->11
    需要注意的是,使用一个宽度指示器不会影响字段的大小和他可以存的范围,一般只是
    用于指定数字的宽度
    age Int(2) --> 并不是代表age最多只能存储99,代表查询age时不足两位使用0和空格占位
    整数类型看MySQL-整数类型.png
    小数类型看MySQL-小数类型.png
    ps:
    小数类型可以存正整数也可以小数
    FLOAT[(s,p)] s代表范围 p代表精度
    Double[(s,p)]
    例如定义一个字段
    money double(5,2) 整数和小数一共占有5位,其中小数占有2位
    最多只能个有五位数组成,其中两位需要是小数
    -999.99 ~ 999.99
    因为Float和Double的存储范围不精确
    若需要存储货币使用DECIMAL(高精度类型),使用方式可以参考double
    MySQL的类型 Java数据类型
    ----------------------------------------
    FLOAT float/Float
    DOUBLE double/Double
    DECIMAL BigDecimal

    向MySQL中存储字符串:
    看字符串类型MySQL-字符类型.png
    char(size) 定长字符,size指N个字符数,若插入的字符长度超过指定长度,会被截取掉
    会给一个警告
    varchar(size) 变长字符,size指N个字符数,若插入的字符长度超过指定长度,会被截取掉
    会给一个警告

    ps:MySQL5之前 char和 varchar的存储范围最大就是0-255
    MySQL5之后 varchar存储范围最大就是0~65535
    若存储的是一些文章可以参考存文本存储 可以使用TEXT系列类型
    ps:在MYSQL中,字符使用的是单引号引起来,相当于Java中String/Stringbuffer/StringBuildr
    无论字符长度一律都使用' '引起来
    name varchar(10) 'abcdefg'

    char和varchar 的对比
    char(5)-->所占用的空间是5个字节,表示char(5)的固定长度就是5个字节
    例如:
    name char(5)
    插入值 '1' -->相当于占用了5个字节
    '111'-->相当于占用了5个字节
    '11111'-->相当于占用5个字节


    varchar(5)-->所占用的字节数会随着实际长度增加而逐渐+1
    例如:
    name varchar(5)
    插入值 '1' -->相当于占用了1个字节
    '111'-->相当于占用了3个字节
    '11111'-->相当于占用5个字节

    MySql中还可以存储时间和日期
    看时间类型MySQL-日期时间类型.png
    日期类型:DATETIME,DATE TIME和 YEAR, TIMESTAMP
    ps:在mysql存储日期使用 ' ' 引号引起来 相当于Java中Date/Calender


    MySQL中还可以存储二进制类型
    看二进制类型 MySQL-二进制类型.png
    二进制类型最大存范围是0~4G
    实际开发中我们是不会讲音频,视频,图片直接以二进制形式存储到数据库中
    我们实际存储的是一个文件连接

    BIT类型用来存储Boolean类型 0-->false 1--> true

    MySql中要执行的语句:
    SQL:结构化查询语言
    SQL:被确定为关系型数据库的标准语言 ,所有的数据库厂商都要支持SQL --> 普通话
    各个数据库厂商可以在SQL基础上可以进行自己的扩展 --> 方言
    MySql就有自己的一套增删改查
    DDL:数据定义语言,用来定义已数据的库,表,列等信息

    DML:数据操作语言,用来定义数据的的记录(数据)

    DCL:数据控制语言,用来定义访问权限和安全级别

    DQL:数据查询语言,用来查询记录(数据)
    ps:sql语句都是以;作为结束
    退出数据 quit


    DDL 操作数据库,表,列等

    库操作
    使用一些关键字: CREATE ALTER DROP
    创建一个数据库
    CREATE database 数据库名字;
    创建一个数据库并指定编码集
    CREATE database 数据库名字 character set gkb;


    查询数据库
    SHOW databases;
    查看定义数据库的信息
    SHWO CTEATE database 数据名称;
    +----------+---------------------------------------------------------------+
    | Database | Create Database |
    +----------+---------------------------------------------------------------+
    | mydb2 | CREATE DATABASE `mydb2` /*!40100 DEFAULT CHARACTER SET gbk */ |
    +----------+---------------------------------------------------------------+

    删除数据库
    DROP database 数据库名;
    ps:删库之前需要备份(谨慎)库一旦没有了 里面所有的表都没有 表都没有数据都没

    修改:
    修改数据库的编码集
    alter database 数据名 character set utf8

    其他:
    使用某个数据库和改变使用的数据库
    use 数据库名字
    查询当前数据库-->需要有一个使用
    select database()
    +------------+
    | database() |
    +------------+
    | mydb1 |
    +------------+

    表的操作:
    创建表
    CREATE TABLE 表名{
    列名1 列的类型 [约束],
    列名2 列的类型 [约束],
    列名3 列的类型 [约束],
    .......
    列名N 列的类型 [约束]


    };

    ps创建表的时候需要大家换行书写
    若在表中使用到了关键字
    例如:创建一张订单表(order),但是order是数据库中的关键字(排序)
    此时表明最好是使用 x_order,就可以区分关键字
    若需要列名需要使用order,此时可以使用(`) `order`
    ps:开发中一般x --> t代替 --> table --> t_order
    创建一张student表,记录学生的信息 id,name,age
    create table t_studen (
    id INT,
    name varchar(100),
    age INT

    );
    ps:数据库中表示字符串数据类型
    char 和 varchar
    区别:char的取值范围0-255
    varchar 的取值范围 0- 65535
    char(5) --> 可以存储5个字符并且在内存空间存5个字节
    例如: '1' --> 5个字节
    '11'--> 5个字节
    不可变的
    varchar(5)--> 可以存储5个字符并且在内存空间存实际存储字符个数的字节
    例如: '1' --> 1个字节
    '11' --> 2个字节
    可变的
    无论是varchar还是char只要超过存储范围,都会被截取并且提示警告
    一般情况下要存储字符串varchar

    查询当前数据库中的表
    show tables;
    +-----------------+
    | Tables_in_mydb1 |
    +-----------------+
    | t_student |
    +-----------------+

    查看表中的字段信息
    desc 表名;
    属性 类型 可以非空 主键 默认值 外键
    +-------+--------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+--------------+------+-----+---------+-------+
    | id | int(11) | YES | | NULL | |
    | name | varchar(100) | YES | | NULL | |
    | age | int(11) | YES | | NULL | |
    +-------+--------------+------+-----+---------+-------+

    在表中添加一条新的列
    alter table 表名 add 列名 数据类型;

    删除表中列(一次只能删一列)
    alter table 表名 drop 列名;

    更改表的名称
    rename table 原表名 to 新表名;

    查看表的细节(详细信息-->建表的细节)
    show crate table 表名;

    修改表的字符集
    alter table 表名 character set 字符集;

    修改列名
    alter table 表名 change 原有列名 新列名 数据类型

    删除表:
    创建一个 Person 表 id name; 查看完 在执行删除
    drop table 表名;
    ps:删除表需要备份(谨慎)

    表中的约束:(只能针对列进行约束)
    1.非空约束 NOT NULL 不许当前类为空的内容
    2.设置默认值 DEFAULT
    3.唯一约束 在当前列中的内容必须是唯一的 unique
    4.主键 PRIMARY KEY 非空且唯一
    5.主键自动增长 AUTO_INCREM


    DML操作
    DML是针对表中的数据进行增,删 ,改操作 不和DDL混了
    查询单独讲
    ps: insert delete update关键字
    在mysql中字符串类和日期类型都需要是哦用哪个''引起来 空值是null

    插入操作INSERT
    语法:
    INSERT INTO 表名(列名1......) VALUES(列对应的值1.....)
    ps:1.列名和列值要一一对象
    可以将插入表中的数据,看做java中方法形参的赋值
    2.值不要超过定义的长度
    3.如果插入的是空值,使用null
    4.插入的日期和字符串一定要使用''引起来
    创建一个emp表,id,name gender,birthday money(最多10个数字组成其中有2位是小数) infos(自我介绍)
    向表中插入数据
    insert into emp(id,name,gender,birthday,money,infos)
    values(1,'zhagsan','man','1995-10-01',100000,'my name is zhangsan,I like play');

    1,zhangsan,man,1995-10-01 100000 my name is zhangsan,I like play

    insert into emp(id,name,gender,birthday,money,infos)
    values(1,'lisi','woman','1999-2-03',10000.15,'my name is zhangsan,I like play');

    2,lisi,woman,1999-2-03 10000.15 my name is lisi,I like paly

    insert into emp(id,name,gender,birthday,money,infos)
    values(3,'王五','man','1999-2-03',10000.15,'我喜欢玩');
    ps:如何查看数据中的具体信息
    show variables like 'character%';
    +--------------------------+---------------------------------------------------------+
    | Variable_name | Value |
    +--------------------------+---------------------------------------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | C:Program FilesMySQLMySQL Server 5.5sharecharsets |
    +--------------------------+---------------------------------------------------------+
    临时修改客户端和服务器的编码集

    set character_set_client=gbk;
    set character_set_server=gbk;

    mysql安装路径汇总 my.ini或 conf --> 设置一些值 永久修改编码

    修改操作 UPDATE
    语法:
    UPDATE 表名 SET 列名 = 列值......;-->修改所有表中对应列的值

    UPDATE 表名 SET 列名= 列值 WHERE 列名 = 值;-->WHERE条件定位到那个列中

    1.将所有员工的薪水修改为5000元
    update emp set money=5000;
    2.将姓名为'zhangsan'的员工薪水修改为30000元
    update emp set money=30000 where name='zhangsan';
    3.将姓名为'lisi'的员工薪水改为4000元,gender改为man
    update emp set money=4000,gender='man' where name='lisi';
    4.将性别是man的员工薪水在原有的基础上增加1000元
    update emp set money = money+1000 where gender='man';

    删除操作 DELETE
    语法:
    DELETE FROM 表名; -->删除表(表中的数据)
    DELETE FROM 表名 WHERE 列名=值 --> 删除一套记录

    1.删除表中id=3的记录
    delete from emp where id=3;
    2.删除表中所有的记录
    delete from emp;
    ps:使用delete这种方式删除表中的数据,表的结构还在,删除后的数据是可以找回的
    3.truncate删除表中记录
    truncate table emp;
    ps:使用truncate删除的表相当于直接 DROP掉了,
    若需要在使用就需要重新创建一个新表 truncate删除的数据是不能找回的 但是删除速度是快于delete

    DQL操作(重点中的重点)
    数据查询操作,DQL的操作语句不会对数据进行改变,而是将数据结果展示给用户
    语法:
    select 列名 from 表名
    [WHERE->GROUP BY ->HAVING -> ORDER BY --> LIMIT]

    通过工具将表导入到了数据库操作的第一张表是商品表
    id --> 商品id 主键
    productName --> 商品的名称
    dir_id -->商品分类编号
    salePrice --> 零售价格
    suppiler --> 供货商
    brand --> 品牌
    cutoff--> 折扣
    costPrice --->成本价

    简单查询
    1.将product这表中所有数据都查询出来
    可以使用 * 代表所有的列
    select * from product;

    2.将product表中的商品id,商品名称,零售价格查询出来
    select id,productName,salePrice from product;

    排除重复 --> 关键字DISTINCT
    3.需求查询商品分类编号
    select dir_id from product;

    查询商品编号是不是有重复
    select distinct dir_id from product;
    Java--> set
    使用了排除重复使用了两列只有两列数据都是一样的时候才能被认为是同一条


    实现数学运算查询
    对NUMBER类型数据(小数和整数)可以使用算数运算符来创建表达式(+ - * /)
    对DATE类型可以使用部分的算数运算符创建表达式(+ -)
    运算符优先级:
    1.乘除高于加减 2. 同级运算符的顺序是从左到右 3,表达式中使用括号 可以强行改变优先级

    需求:查询所有货品Id,名称和批发价格(批发价格=零售 * 折扣)
    ps:列名看做属性或是参数 使用类最下面的数据进行计算时 直接使用类名即可
    select id,productName,salePrice*cutoff from product;

    需求:查询所有货品id,名称和个进50个的成本价格(成本=costPrice)
    select id,productName,costPrice*50 from product;

    需求:查询所有货品id,名称和个进50个的成本价格(成本=costPrice),并且每个运费成本是1元
    select id,productName,(costPrice+1)*50 from product;

    设置列名的别名 --> AS
    1.改变猎德标题头
    2.用于表示计算的结果
    3.作为列的别名存在
    4.如果别名中使用了特殊字符,或者强制大小写,或空格,都需要使用''引来

    需求:查询所有货品id,名称和个进50个的成本价格(成本=costPrice),并且每个运费成本是1元
    select id,productName,(costPrice+1)*50 as totalCostPrice from product;

    ps:as 是可以省略的 尽量不要省略
    select id,productName,(costPrice+1)*50 totalCostPrice from product;


    设置显示格式查询:
    为了使用户浏览数据更加方便们可以使用一个关键字 'CONCAT函数'来连接字符串
    需求:查询商品的名字和零售价格 格式:XXX商品的零售价格为:XXX
    select CONCAT(productName,'商品的零售价格为:',salePrice) as productSalePrice from product;

    过滤查询:
    语法: SELECT 列 FROM 表 WHERE 子句限定(查询限定条件)
    ps:where是一个条件限定语句where后面会跟随着你所要限定的条件
    比较运算符:
    > 大于 >= 大于等于 < 下于 <= 小于等于 = 等于 !=(<>) 不等于

    需求:查询货品零售价格为119的所有货品信息
    select * from product where salePrice=119;

    需求:查询获评名称为'罗技G9X'的所有货品信息
    select * from product where productName='罗技G9X';

    需求:查询货品名称不为'罗技G9X'的所有货品信息
    select * from product where productName!='罗技G9X';
    版本二:
    select * from product where productName<>'罗技G9X';

    需求:查询分类编号不等于2的货品信息
    select * from product where dir_id != 2;

    需求:查询货品名称,零售价格小于等于200的货品
    select productName,salePrice from product where salePrice <= 200;

    需求:查询id,货品名称,批发价格(零售*折扣)大于350的货品
    select id,productName, salePrice * cutoff from product where salePrice*cutoff > 350;
    //需求 这个列名salePrice * cutoff不好修改 pf --> 在where中可以直接使用别名代替
    //暂定
    select id,productName, salePrice * cutoff pf from product where salePrice*cutoff > 350;

    SQL中查询语句中的执行顺序
    1.from子句 确定是从哪一张表中取做的查询
    2.where子句:从表中直接筛选出符合条件数据
    3.select子句:从筛选之后的记过中集中显示出某些类
    4.ORDER BY子句:对查询结果排序

    逻辑运算符:
    AND(&&) 组合的条件都为true时返回值true
    OR(||) 组合的条件只要有一个为true返回true
    NOT(!) 若条件是false 返回true

    需求:查询id,货品名称,批发价格在300~400之间的货品
    select id,productName,salePrice*cutoff from product where salePrice*cutoff>=300 AND salePrice*cutoff<=400;

    需求:查询id,货品名称,分类编号为2,4的所有货品
    select id,productName,dir_id from product where dir_id=2 OR dir_id=4;

    需求:查询id,货品名称,分类编号不为2的所有商品
    select id,productName,dir_id from product where dir_id!=2;
    select id,productName,dir_id from product where NOT dir_id=2;

    需求 查询id,货品名称,分类标号的货品零售几个大于等于250或者成本大于等于200的所有商品
    select id productName,dir_id,salePrice,costPrice from product where salePrice>=250 OR costPrice>=200;

    ps:优先级关系
    1等 所有的比较运算符 2等 NOT(取非) 3等 AND(&&) 4等 OR(||)


    范围查询 BETWEEN AND
    使用BERWEEN运算符显示某一值的范围记录,这个操作符常见的使用在数字类型或日期类型的范围上
    语法:
    SELECT 列 FROM 表 WHERE 列 BETWEEN 最小值 AND 最大值;
    需求:查询id,货品名称,批发价格在300~400之间的货品
    select id,productName,salePrice*cutoff from product where salePrice*cutoff>=300 AND salePrice*cutoff<=400;
    select id,productName,salePrice*cutoff from product where salePrice*cutoff BETWEEN 300 AND 400;
    需求:查询id,货品名称,批发价格在不在 300~400之间的货品
    select id,productName,salePrice*cutoff from product where NOT salePrice*cutoff BETWEEN 300 AND 400;
    ps:某些可以替代 AND 和 OR

    使用IN运算符
    判断类的值时是否存在指定的集合中
    语法:
    SELECT 列 FROM 表 WHERE 列 IN(值1,值2....)
    需求:查询id,货品名称,分类编号为2,4的所有货品
    select id,productName,dir_id from product where dir_id=2 OR dir_id=4;
    select id,productName,dir_id from product where dir_id IN(2,4);
    需求:查询id,货品名称,分类编号不为2,4的所有货品
    select id,productName,dir_id from product where NOT (dir_id=2 OR dir_id=4);
    select id,productName,dir_id from product where NOT dir_id IN(2,4);
    ps:某些时候可以替代 OR

    空值查询- IS NULL
    NULL表示某一列没有数据也不是空字符串
    IS NULL 判断列的值是是否为NULL

    需求:查询商品名为NULL所有的商品信息
    1.向当前表中插入一行数据都是NULL
    insert into product(id,productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)VALUES(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

    SELECT * FROM product WHERE productName IS NULL;


    模糊查询 like
    使用like运算符执行通配查询,查询条件可以包含文字字符或数字
    通配符匹配模式:
    % : 可表示零或多个任意字符
    _ : 可以表示一个字符

    需求:查询id,货品名称匹配'罗技M'
    select id,productName from product where productName like '罗技M%';
    ps: %在字符串后面 代表着以XXX开头 %在字符串的前面 代表着以XXX结尾

    需求:查询id,货品名称,分类编号,零售价格大于等于200的货品 或 名称能匹配'罗技M1'后两个字符的商品
    select id,productName,dir_id,salePrice from product where salePrice >= 200 OR productName like '%罗技M1__';


    结果排序
    使用ORDER BY 子句将查询的记录进行排序
    ASC : 升序 可以省略
    DESC : 降序
    ps: ORDER BY 语句出现在SELECT语句的最后
    语法:
    select 列 from 表 where 列 条件 ORDER BY 列名[ASC/DESC]....
    需求:查询 id,货品名称,分类编号,零售价格并且按零售价格升序
    select id,productName,dir_id,salePrice from product ORDER BY salePrice ASC;

    查询 id,货品名称,分类编号,零售价格并且按零售价格降序
    select id,productName,dir_id,salePrice from product ORDER BY salePrice DESC;

    需求:查询id,货品名称,分类编号,零售价格按照分类编号排序降序,在按零售价格排序
    select id,productName,dir_id,salePrice from product ORDER BY dir_id DESC,salePrice ASC;

    需求:查询M系列并按照批发价格排序
    select id,productName,salePrice*cutoff from product WHERE productName like '%M%' ORDER BY salePrice*cutoff ASC;

    需求:查询分类编号为2并按照批发价格排序
    select id,productName,dir_id,salePrice*cutoff from product WHERE dir_id = 2 ORDER BY salePrice*cutoff ASC;

    ps:select语句执行循序
    先执行from -->然后Where-->然后selec-->最后order by

  • 相关阅读:
    Spring2——特殊值的注入问题、自动装配、使用注解定义bean
    关于ueditor配置单图无法上传的问题
    初始WebApi(3)
    WebApi参数检查验证FluentValidation的使用方法
    js获取兄弟之间的标签
    C#集合ArrayList、泛型集合List(3)
    C#栈、堆的理解(2)
    C#值类型、引用类型(1)
    字符串截取的几种方法
    MVC结合Ajax实现简单的批量删除
  • 原文地址:https://www.cnblogs.com/lijun199309/p/9664263.html
Copyright © 2011-2022 走看看