mysql function 表名作为参数_mysql基础学习整合

  • database包含tables(具体数据库中包含各个表)
  • tables包含columns(具体表中包含各个列)
  • describe 表名是查看表格结构;
  • 清空表中数据:truncate 表名;
  • set sql_safe_updates=0;(取消安全模式)
  • 修改数据语句:update 表名 set 列名1='',列名2='' 记得一定要加where表达式来限定条件
  • select *表示取出所有列,后面加where表达式 来限定行的条件
  • 字符串和日期常数需要单引号括起来 '',数字常数可以直接书写
  • 整型——int系列默认有符号;unsigned是无符号;int(M)中的M代表限制了字符宽度,M位宽度 数据类型存储列int的大小从小到大:tinyint<smallint<mediumint<int<bigint
  • float——浮点型(小数),decimal——定点型,decimal比float更精确。float(M,D)或decimal(M,D);M,D分别代表:M代表小数总位数,而D代表小数点右边的位数 例如float(6,2)就是-9999.99~9999.99
  • 字符串类型:char (定长字符串);varchar (变长字符串) text(文本类型)一版存储文章内容,不需要后缀的默认值和非空限制;blob(二进制类型)一般存储图像音频等信息
  • alter增加列;语句是:alter table 表名 add 列名 列数据类型 列参数;常用的列参数是unsigned--无符号类型(unsigned的数据范围是0~255);
  • 列参数:zerofill和M配合使用,比如学号列,需要000## 填充;另外zerofill有0的填充,必同时是unsigned类型
  • 如果要加在固定列后面,利用after 语句:alter table 表名 add 列名 列数据类型 列参数 after 某列;
  • 如果把新列放在列的最前面,利用first语句:alter table 表名 add 列名 列数据类型 列参数 first;
  • 新建表格:

2b97bd5bbe90db0ebbb34d0a0450613e.png

事务:

2d323318f75b99cb2982e4c0817b7984.png
  • 新建多条数据是时 :1)START TRANSACTION; 2)insert into 表名 values(数据1,数据2…数据N);……insert into 表名 values(数据A,数B…数据N);COMMIT;
  • 删除列:alter table 表名 drop 列名;修改列:alter table 表名 modify 列名 新的列数据类型 列参数 同时注意modify不能改列名,应该用change修改列名,语句是:alter table 表名 change 旧列名 新列名 新的列数据类型 新列参数
  • 删除多行:delete from 表名 where表达式;
  • 删除多列,语句中需要加column 如图:

2bfb27c955585da2e14600dd88b36da5.png

8ff080fb7d60f6e440d52183ad374643.png
  • 日期型 date YYYY-MM-DD;datetime YYYY-MM-DD HH:MM:SS ;timestamp YYYY-MM-DD HH:MM:SS;year YYYY
  • 建立相同结构的表:create table 新数据表名 like 原数据表名
  • 整个表格的数据复制语句:insert into 新数据表名 select 列名1,2,3…N from 原数据表名
  • 注释的书写(--注释 或者/*注释*/)
  • And运算符的优先级高于Or,如果想优先执行Or,可以使用括号;
  • where price between 100 and 500包括等于100等于500 的数据;where price>100 and shop_price <500 相当于 100<price<500
  • <= 之类的符号不但能比较数字,也能按照字典顺序来比较字符串
  • 左连接 left——语法:A left join B on 条件 ;理解为A表在左不动 ,B表在A右边滑动取值,A表与B表通过一个关系来关联筛选 条件为真,则B表对应的行取出 它的形成可以看作一个结果集(一张表)可以对其结果集进行再查询(A、B表的列都可以查询)
  • 左连接根据左边的表 右表中找不到的结果 用 null补齐该行
  • 右连接和左连接相同,相当于B right join A on 条件 ; 一般用左连接即可 A left join B on 条件 就等价于 B right join A on 条件
  • 内连接inner join——语法:A inner join B on 条件 ;内连接可以看作是左右连接的交集
  • 外连接可以看作是左右连接的并集 ,但在mysql中不支持,用union合并左右连接的效果就是并集
  • 设置别名:select 列名 as 列别名;或者select…from 表名 as 表别名
  • 合并union——语法:SQL1 union SQL2;可以通过as设置别名让两张表的结果集中列名一致 但如果不统一列名,结果集的列名将以第一张表的列名为准 另外 union 会对结果集自动去重;如果不想被去重,使用 union all ;union使用条件:只要两个表的列数相同,即可合并取出结果集
  • order by 注意事项:内层 order by 语句单独使用,不会影响结果集,只是排序,在执行时会被mysql优化掉失去其排序意义,所以不起作用;但在影响结果集的时候,就有意义,比如配合limit 使用,内层 order by 排序功能可用
  • 聚合函数删除重复值,用select count(distinct 列名)from 表名 或者select distinct count(列名)from 表名
  • count 只是计数功能,不能count(表达式)来筛选但可以用 sum(表达式)来计数
  • Group by 优先于select 语句执行,所以不能使用select的别名
  • where语句中不能有聚合函数,需要利用having语句来限制条件,order by可以使用聚合函数排序
  • order by 语句通常写在select语句的末尾 默认是升序,DESC是降序,order by 列名 DESC;多条件排序就是order by 列名1,order by 列名2【列名1优先于列名2】
  • 限制条数用limit:放在order by 后面,语法:limit[offset,N] offset是偏移量 默认值为0;N是取出的条目 ;例如:limit3是直接取出前三条数据;而 limit 2,3 就是得到第三到第五的三条数据 跳过2条数据偏移量是2,然后再取3条, 是'3 4 5' 三条数据被取出
  • 字句顺序:where>group>having>order by>limit
  • 多行数据插入语法:1)START TRANSACTION 2)INSERT INTO 表名 VALUES (插入的内容,用 '' 和 , 分隔开)语句用 , 结尾 3)重复INSERT INTO 表名 VALUES (插入内容); 4)COMMIT; 5)完成数据插入

6855ba7d75e2aa5a668ebe2bd47544ed.png

60abac872d21b3ec40933f39387ad856.png

d0c20f32d1a15ae00e1f8b446ea4c135.png
  • 查看表的编码:show full columns from 表名
  • 修改表编码至支持中文: alter table 表名 convert to character set utf8;

5fde2bb3111d02b5db769cdf5b476909.png
  • 子查询:

1.where型子查询:把内层的查询结果作为外层的查询条件;如果where列=内层SQL,那么子查询的返回必须是单个值;如果where列 in 内层SQL,那么返回值只能是单列 【典型题:查询最大商品、查询最贵商品等】

2.from 型子查询:把内层的查询结果作为临时表,供外层SQL继续查询 【典型题:查询每个分组下最新商品、最贵商品等】

3.exist型子查询:把外层的查询结果代到内层,看内层查询是否成立,如成立则取出值【典型题:查询有商品的分组】

  • 拼接字符串的代码用 concat,select 列A,列B, concat(列A,列B) as str_concat from 表名;
  • null:单独的null是空类型 无法进行比较,需要用到 is null和is not null;碰到其他运算符一律返回null——所以在建表时,会加上 not null default ''或 not null default 0 的限制
  • length('字符串')可以计算字符串长度;replace(对象字符串,替换前字符串,要替换成的字符串)是字符串替换函数;substring 是字符串截取函数(对象字符串,from从第几位截取,for是截取字符数)
  • case when then函数来判断,例如:select case 列名 when数据1 then '返回值1' when数据2 then '返回值2' …end from 表名;或者if函数:if(表达式) 例如:select * if(表达式,'返回值1','返回值2')
  • current date 是当前时间;extract(日期元素 from日期),例如extract(minute from current_timestamp);cast(转换前的值 AS 转换后的数据类型)是类型转换函数,例如cast('0001',AS interger)
  • DEFAULT是指默认值
  • coalesce(数据1,数据2,数据3)是可以将Null转换为其他值的函数,返回参数中第一个非空值,例如coalesce(Null,1),就返回1
  • inner join是指取A、B表的交集;outer join获得的是A和B的并集;union 是表格的加法;union all是包含重复值的表格加法
  • view 视图;CREATE view as select语句 ; 视图可以理解为表的影子映射来的;某些情况下,视图和表的数据一一对应的时候,视图的修改会影响到表,可理解为有反函数
  • algorithm 有三种形式 algorithm=merge 是合并查询语句;algorithm=temptable 是建立临时表;algorithm=undefined 是未定义,由系统判断
  • algorithm的语句例如:1)create algorithm=merge view v2(视图名) as select*from 表名 where >200; (列名表达式1) 2)select*from v2 where <500; (列名表达式2) 这样的algorithm比view 查询效率更快

8e3e8efb7ebdb28bc38615dd42be27b0.png
  • 运算符 http://www.runoob.com/mysql/mysql-operator.html
  • 函数 http://www.runoob.com/mysql/mysql-functions.html

ROUND(X,D)函数:表示将值 X 四舍五入为小数点后 D 位的数值,D为小数点后小数位数。若要保留 X 值小数点左边的 D 位,可将 D 设为负值。

3a2bdf0d6b55ec232819ed4f61238c5b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值