为了账号安全,请及时绑定邮箱和手机立即绑定

与MySQL的零距离接触

平然 学生
难度入门
时长 8小时29分
学习人数
综合评分9.67
950人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 1、countcat():字符连接;select concat('imooc','-','mysql') from db

    2、countcat_ws():使用指定的分隔符进行字符连接;select concat_ws('|','A','B','C')

    3、format():数字格式化,返回一个字符串;select format(12345.67,2):小数点后保留两位

    4、upper():字符大写;

    5、lower():字符小写;

    6、left():获取左侧字符;

    7、right():获取右侧字符;

    8、length():获取字符串长度;

    9、ltrim():删除前导空格;rtrim():删除后续空格;trim():删除前导及后续空格;select trim(leading '?' from '??mysql???'):删除前导的‘?’

    select trim(trailing '?' from '??mysql???'):删除后续的‘?’

    select trim(both '?' from '??mysql???'):删除所有的‘?’,但是无法删除中间的‘?’,需要使用replace()函数

    replace('??my??sql???','?'," ")

    10、substring():截取字符串

    substring('mysql',1,2):从第1位取2位,起始为hi也可以为负值,但长度不能为负值

    11、like:模式匹配

    在mysql中,%代表任意多个字符,_代表任意一个字符。

    使%或者_不为通配符的方法:

    select * from test where first_name like '%1%%' escape '1':1后面的%不在为通配符,而是代表%


    查看全部
    2 采集 收起 来源:MySQL 字符函数

    2019-01-13

  • 子查询是指出现在select语句中的,必须出现在小括号内。

    子查询的外层可以是select语句,insert语句、update语句及delete语句。

    子查询中可以包含多个关键字或条件,如group by、order by、limit以及相关函数等。

    使用子查询的环境:

    1. 比较运算符引发的子查询

    2. in或not in引发的子查询

    3. exist或not exist引发的子查询。

    多表更新、多表删除、select语句中都可以使用连接。

    连接的类型:

    1. 内连接(交集,左表和右表都符合条件的记录)

    2. 外连接(左连接和右连接)

    运算符和函数:1、字符函数 2、数值运算符与函数3、比较运算符与函数4、日期时间函数5、信息函数6、聚合函数7、加密函数

    查看全部
    1 采集 收起 来源:回顾和概述

    2019-01-13

  • 多表的删除:

    DELETE tbL_name[.*] [, tbl_name[.*]] ...FROM table_references [WHERE where_condition]

    首先找到多余的:SELECT goods_id,goods_name FROM tdb_goods GROUP BY(分组) goods_name HAVING(分组的条件) count(goods_name)>=2;

    然后是删除:DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name)>=2) AS t2 ON t1.goods_name=t2.goods_name WHERE t1.goods_id>t2.goods_id;


    查看全部
    0 采集 收起 来源:多表删除

    2019-01-13

  • 数据表的自身连接:只要在表前加上p/s.就可以了。又因为种类里有很多不同的类型,我们想知道各个种类有多少个类型。此时需要计数:

    如:SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id=p.type_id;

    p.父表;s.子表

    (父子表还可以调换:SELECT p.type_id,p.type_name,count(s.type_name) child_count【计数】 FROM tdb_goods_types  p LEFT JOIN tdb_goods_types s ON p.parent_id=s.type_id GROUP BY 【分组】p.type_name ORDER BY【排序】 p.type_id;)



    查看全部
  • 外连接:

    A LEFT JOIN B join_condition(左外连接,右外连接情况下调换AB就可)
    数据表B的结果集依赖数据表A。(A中有的记录才可以在B中显示,否则不显示)
    数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。
    左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。(A表决定B表)
    如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。

    如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作: col-namd IS NULL时,如果col-name被定义为NOT NULL, MySQL将在找到符合连执着条件的记录后停止搜索更多的行。


    查看全部
  • 外连接:左外连接,右外连接

    左外连接:显示左表的全部记录及右表符全连接条件的记录,如果左表的某个字段记录右表不满足,则那个数据为NULL

    右外连接:显示右表的全部记录及左表符全连接条件的记录,如果右表的某个字段记录左表不满足,则那个数据为NULL


    查看全部
    0 采集 收起 来源:外连接OUTER JOIN

    2019-01-13

  • INNER JOIN,内连接

    在MySQL中,JOITERN,CROSS JOIN和INNER JOIN是等价的。

    LEFT [OUTER] JOIN在外连接

    RIGHT [OUTER] JOIN,右外连接

                         连接条件

    使用ON关键字来设定连接条件,也可以使用WHERE来代替。

    通常使用ON关键字来设定连接条件,使用where关键字进行结果集记录的过滤。


    查看全部
    0 采集 收起 来源:内连接INNER JOIN

    2019-01-12

  • 如果数据表中文字符很多,而且数据很多时那么查询运行的时间将会很多,所以有时必要将一些文字编程数字,方便查询。那么就需要建立外键,将文字转化成数字(如类型转化成品类1,2,3、、、)

    一、因此先创建一个数据表: GREAT TABLE good_cates FROM tdb_goods IF NOT EXISTS good_cate;

    二、然后查看总表里要更改的品类有多少个类型:SELECT good_cate FROM tdb_good GROUP BY good_cate;

    三、然后将查询到的品类写入到新建表中(查看表结构DESC tdb_goods_cates;):

    INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

    四、最后根据分类表更新总表(多表更新)

    UPDATE table references SET col_namel={expr1|DEFAULT) [,col_name2={expr2 | DEFAULT])]...[WHERE where_condition]

    两张表的链接可以赋予别名也可以不赋予别名,即使用表的名称进行连接。或者还可以使用表的类型进行连接。

    如:UPDATE tdb_goods INNER JOIN(常用) tdb_goods_cateS ON(条件) goods_cate=cate_name SET(更新的值) goods_cate=cate.id.

    表的更新步骤为:

    一、创建表

    二、INSERT  SELECT 将记录写入数据表

    三、多表的更新

    多表更新:

    (1) UPDATE table_references SET col_name1={expr1| DEFAULT}[ ,  col_name2={expr2 | DEFAULT] ... [WHERE where_condition]

    (2) CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...] select_statement

    方法(2)要优于方法(1),方法(2)相当于将查询和插入结合在一起

    由于

    如:语句一:SELECT  brand_name FROM tdb_goods group by brand_name;

    语句二:

    CREAT TABLE tdb_goods_brands

    —>(

    —>brand_id SMALLINT UNSIGEDV PREMAY KEY AUTO_INCREMENT,

    —>brand_name VARCHAR(40) NOT NULL

    —>)

    —>SELECT brand_name FROM tdb_goods GROUP BY brand_name;

    用表的别名进行表的更新更方便

    如:UPDATE tdb_goods AS g INNERJOIN tdb_goods_brands AS b ON g.brand_name=b.brand_name 

    —>SET g.brand_name=b.brand_id;


    五、在更新表之后,由于表的结构可能还是字符型,因此先查看一下表的结构

    SHOW COLUMNS FROM tdb_goods;(或者DESC tdb_goods)

    六、然后更改结构,即将字符改成数字

    ALTER TABLEtdb_goods

    —>CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,

    —>CAHNGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

    此时才是真正的对数据表减肥


    查看全部
  • -- 通过tdb_goods_cates数据表来更新tdb_goods表


      UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name 


      SET goods_cate = cate_id ;



    查看全部
    0 采集 收起 来源:多表更新

    2019-01-12

  • INSERT ... SET ...

    可以使用子查询 INSERT [INTO] tbl_name [(col_name,...)] SELECT ...将查询结果写入数据表 

    Eg:

     INSERT INTO table_name [(column_name)] SELECT column_name2 FROM table_name2 GROUP BY column_name3; 

     子查询与连接——INSERT-SET子查询

    1、INSERT tbl_name [(col_name,...)] (SELECT col2_name FROM tbl2 ...)

     2、同样注意字段数量和类型匹配 CREATE TABLE IF NOT EXISTS tdb_goods_cates( cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, cate_name VARCHAR(40) NOT NULL ); SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; //列出所有品牌种类cate// INSERT INTO <表名> SELECT..... DESC tdb_goods_cates; //显示出tdb_goods_cates表中的项目名称// INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; //在表tdb_goods_cates中插入tdb_goods中的cate种类//


    查看全部
  • 使用比较运算符的子查询=、>、<、>=、<=、<>、!=、<=>

    语法结构 operand comparison_operator subquery

    如:SELECT AVG(goods_price) FROM tb1_goods;  ——查找到的是平均价格。

    SELECT ROUND(AVG(goos_price),2) FROM tb1_goods;  ——这个是对查找到的平均数保留两位小数。

    假如平均值为:5636.36 , 那么接下来查找大于平均值的列:

    SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=5636.36;

    因为5636.36是说那个一条的结果,那么将两个语句合并后为:(子查询)

    SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=(SELECT ROUND(AVG(goods_price),2) FROM tb1_goods);

    如果要查找其他结果,如:SELECT goods_price FROM tb1_goods WHERE goods_cate='超级本'; ——查找超级本的价格

    SELECT * FROM tb1_goods WHERE goods_cate='超级本'; —— 查找超极本的所有列

    SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——返回值为错误,原因是>后面的查找结果不是唯一的,而且并没有指定>的是具体那个数或者范围,那么:

    此时就需要用到:operand comparison_operator ANY (subquery)
    operand comparison_operator SOME (subquery) 
    operand comparison_operator ALL (subquery)

    其中,ANY, SOME, ALL的使用原则就是:

                       ANY      SOME      ALL

    > 和 >=       min        min       max

    < 和 <=       max       max       min

         =           任意值     任意值

    <> 和 !=                                 任意值


    查看全部
  • having进行条件指定讲究有点多啊,如果是having部分的条件是聚合函数,比如最大值,最小值,平均值,等等,则可以写不在select中的字段,写在聚合函数里面即可,但是如果没有聚合函数则必须是存在于select中的某个字段

    https://img1.sycdn.imooc.com//5c1a40e10001f68104380173.jpg


    查看全部
  • 查询结果分组 GROUP BY 

     [GROUP BY {col_name|position} [ASC|DESC],...] 

    ASC:升序,默认 

    DESC:降序 

    position:SELECT语句中列的序号 

    例:

    SELECT sex FROM users GROUP BY sex;

    对users中的sex按sex进行分组 

    例:

    SELECT * FROM users GROUP BY 1;

    (这里的1表示查询的第一个字段,这里查询所有字段信息,第一个字段就是id,所以会按照id字段进行分组) 

    1表示SELECT语句中第一个出现的字段,即位置。 

    建议BY后写列名称,不写位置,因为位置还要人为数。  

    注意:如果存在相同的值(例如上面的age可能有多个相同的值),只会保留一个。但使用ORDER BY 就不会省略。



    查看全部
  • WHERE 条件表达式 对记录进行过滤,

    如果没有指定的WHERE子句,则显示所有记录 在WHERE表达式中,

    可以使用MYSQL 支持的函数或运算符


    查看全部
  • 查询表达式 

    每一个表达式表示想要的一列,必须至少有一个 

    多个列之间以英文逗号分隔 

    星号(*)表示所以列 tbl_name.*可以表示命名表的所有列 

    查询表达式可以使用[As]alias_name为其赋予别名 

    别名可用于GROUP BY,ORDRE BY或HAVING子句  

    SELECT 字段出现顺序影响结果集出现顺序,字段别名也影响结果集字段别名。

    一、查找记录 

    1、语法: 

    SELECT select_expr [,select expr2...] 只查找某一个函数或表达式 

    {

    FROM table_references 查询表名 

    [WHERE where_conditon] 查询条件 

    [GROUP BY {col_name|position} [ASC|DESC],...] 按某个字段进行分组,相同的只显示第一个 

    [HAVING where_conditon] 分组时,给出显示条件 

    [ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序 

    [LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回数量

    }

    2、查询表达式的顺序会影响结果顺序 

    每个表达式表示想要的一列,必须有至少一个 

    多个列直接以英文逗号分隔 

    星号*表示所有列 


    3、使用tbl_name.col_name来表示列记录,这多表查询时可以区别开同名的列 

    4、使用[AS] alias_name为其赋予别名,别名可以用于GROUP BY、ORDER BY或HAVING子句,例如SELECT id AS userId,username AS uname FROM users; 这样查询出来的结果会用别名表示



    查看全部

举报

0/150
提交
取消
课程须知
要想学习本课程,你只需要知道数据库是个什么东东就足够了,是不是很easy?!
老师告诉你能学到什么?
1、MySQL安装与配置 2、数据类型 3、流程控制与运算符 4、DDL、DCL、DQL、DML 5、常用函数 6、表类型(存储引擎) 7、图形化工具

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!