mysql操作

关系型数据库

本质上是说这类数据库有多张表,通过关系彼此关联

sys是Mysql自己内部运行用的数据库

shemas

着重号的使用:

  1. 区分字段和关键字
  2. 例如:NAME本身是关键字,加``着重号后会变色,便于区分

tables

  1. 存储数据的地方

    点击最右侧的表格图标

  2. 显示出的数据每一行为一个数据,用id来唯一区分

    views

  3. 视图,将不同表的数据组合到一起

    stored procedures

  4. 存 储过程
  5. 用来查询数据

    functions

  6. 函数
  7. 存储再数据库里的项目

    码风

  8. 大写mysql关键字,小写其余内容

button

  1. Query中的execute是执行所有的sql

关键字

use

  1. 调用数据库,类似与py中的import和c++中的include

    select

  2. 指名想要明确获取的列
  3. *代表所有列

查询常量值:

  1. select 100;
  2. select “name”;mysql中不区分字符和字符串的概念

    查询表达式:

  3. select 100*9;

    查询函数:

  4. select VERSION()
  5. 调用该函数得到它的返回值

逻辑顺序:

  1. 先用from找到表
  2. where走筛选
  3. 最后select走查询

    FROM

  4. 指名想要查询的表
  5. select * from some_table:先库后id最后table
  6. 和py中的from random import choice 有异曲同工之处

    调用大小级关系

  7. 调用库用USE
  8. 调用列用select
  9. 调用table用FROM

    select语句

  10. 选择某一列
  11. 先后顺序根据参数的前后顺序决定
  12. DISTINCT为消除重复项(列中参数的重复项)

    where语句

  13. 日期参数默认是year-month-date:四位year,两位month,两位date

分类:

  1. 使用条件表达式筛选:条件运算符:> < = != <> <= >=
  2. 按照逻辑表达式筛选:逻辑运算符:&& || ! and or not
  3. 模糊查询:like; between and; in; is null;

参数:and ;not; or;in;between;like,regexp

参数特点:

  1. not

  2. WHERE NOT(ID != 10 AND CountryCode = “AFG”)即可产生ID != 10 AND CountryCode = “AFG”的反面

    in

  3. in:简化or的写法,即WHERE Name = a OR Name = b OR Name = c == WHERE Name IN (‘a’,’b’,’c’);字符型的值必须使用单引号引起来;当某一位为下划线的时候’_’
  4. in列表的值类型必须统一
  5. 相当于=,不能用通配符’%’和’_’

    between and

  6. between:当要将一个属性同一个范围值相比较简化AND的写法:WHERE points >= 1000 AND points <= 3000 == WHERE points BETWEEN 1000 AND 3000(闭区间取值);两个临界值不能颠倒(先大于等于,后小于等于)

    like

  7. LIKE:%表示any number of characters;_表示single character

    regexp

  8. REGEXP:regular expression(正则表达式),用异或^来表示字符串开头,用美元$来表示字符串末尾,用|来表示多个寻找,用[‘]’来表示下一个字符从某个列表中寻找,在[]中用-来表示从哪到哪(a-h即为abcdefgh)

    null

  9. null不能够使用=和<>
  10. ifnull(exp1,exp2):当exp1为null时将返回exp2,否则将返回exp1

正则表达式:

  1. ^ beginning
  2. $ end
  3. | logical or
  4. [abcd] any choice
  5. [a-f] surrounding
  6. <=> 安全等于,既可以用Null和数值等于

schemas中的每一个table的设置

  1. 第一行带黄色感叹号的是这张表的主键列,每一个table中都有一个

order by

  1. 排序,例:SELECT Name,CountryCode FROM city ORDER BY 1,2(即Name,CountryCode)
  2. 即将按照Name先排序,后按照CountryCode进行排序
  3. asc是升序排序
  4. desc是降序排序
  5. SELECT * FROM employees ORDER BY salary DESC;
  6. SELECT * FROM employees ORDER BY salary ASC;(asc可以省略)

limit n

  1. 返回前n项

    offset(偏移量)

  2. limit m,n:跳过前m项数据后获取n条记录

内链接:同一个库中不同表格的链接

  1. 联合记录:on语句,例:JOIN customers ON orders.customer_id = customers.customer_id
  2. 加表格名前缀使列可以用,防止ambigous
  3. 使用别名避免重复,紧跟在每个表后使用别名

    跨数据库链接:不同数据库之间的链接

  4. 未使用USE的数据库记得加上前缀

为字段起别名

便于理解,如果要查询的字段有重名的情况,使用别名可以区分开来

方式1:AS

  1. select 100*98 AS 替换后的名字;
  2. select last_name AS 姓,first_name AS 名 FROM table;

    方式2:空格

  3. select last_name 姓,first_name 名 FROM table;

案例:

  1. 当有空格,井号等特殊符号时需要加单双引号
  2. SELECT salary AS “out put” FROM employees;

去重

在字段前加上字段DISTINCT

  1. SELECT DISTINCT department_id FROM employees;

+的作用

仅仅只有一个功能:运算符

只要有一个操作数为字符串,起连接符作用的java中+作用在mysql中不存在

  1. 当其中一方为字符型,试图将字符型数据转换为数值型,成功则继续做加法运算,失败则将字符型数据转换为0
  2. SELECT ‘123’ + 90得出213
  3. SELECT ‘join’ + 90得出90
  4. 当一方为null则结果肯定为null(没有底数怎么加都没有结果)

函数:

  1. 隐藏了实现细节
  2. 提高了代码的重用性

    调用

  3. select 函数名(实参列表) [from 表]

    特点

  4. 叫什么(函数名)
  5. 干什么(函数功能)

分类

  1. 单行函数:contact length ifnull等只有一个返回值的函数
  2. 分组函数:做统计使用,缩小返回值的量,统计函数,聚合函数,组函数

    concat

  3. SELECT CONTACT(‘a’,’b’,’c’) AS 结果;得出abc

字符函数

length(是字节长度)

  1. select length(‘join’) 4
  2. select length(‘张三疯hahaha’) 15(看字符集判断汉字字节长度)

    concat拼接字符串

  3. SELECT CONCAT(last_name,’-‘,first_name) FROM employees;

    upper,lower

  4. SELECT UPPER(‘join’); JOIN

    实例:将姓变大写,将名变小写

  5. SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;

    substr,substring

    索引从1开始

  6. SELECT SUBSTR(‘abcdef’,from) out_put:将从from到最后的字符选择

    截取指定长度的字符(一定是字符长度)

  7. SELECT SUBSTR(‘abcdef’,from,end) out_put

姓名用首字符大写,其他字符用小写后用——拼接

SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),’_’,LOWER(SUBSTR(last_name,2)));

instr

  1. 用于返回字符的起始索引
  2. SELECT INSTR(‘abcdef’,’def’) AS out_put
  3. 如果找不到返回0

trim:

  1. SELECT TRIM(‘ abcde ‘) AS out_put
  2. 去掉字符串两侧的空格
  3. python中是strip或者replace

    删去a:

  4. SELECT TRIM(‘a’ FROM ‘aaaaaaaa人名aaaaaaaaa人名aaaaa’)将删去两侧的a,中间的a不会删去

lpad

  1. 用指定的字符实现左填充指定长度
  2. SELECT LPAD(‘人名名’,10,’*’)

rpad

  1. 用指定字符实现右填充
  2. 参数:待填充字符串,填充后长度,用于填充的字符串

replace

  1. SELECT REPLACE(‘abcdefabcdef’,’a’,’b’) AS out_put
  2. 将字符串中的所有a和b都删去
  3. 参数:待删除字符串,后面都是需要删除的字符

数学函数

  1. 数学函数的第二位都是小数点后保留几位

    round

  2. 四舍五入
  3. SELECT ROUND(x,y)
  4. 将x绝对值四舍五入,后删去正负号
  5. y是保留小数点后的位数

ceil

  1. 向上取整
  2. 返回大于等于该参数的最小整数

floor

  1. 向下取整
  2. 返回小于等于该参数的最大整数

truncate

  1. 截断,无论后面是什么,都会四舍五入
  2. SELECT TRUNCATE(1.69999,1) AS out_put:返回1.6

mod

  1. SELECT MOD(10,3);
  2. 相当于SELECT 10 % 3;
  3. 被除数如果为正,则结果为正,否则为负
  4. a-a/b*b (除数一定返回的是整数,即被整除的值)

日期函数

now

  1. 用于返回系统日期+时间

curdate

  1. 用于返回系统日期,没有时间
  2. 与now的区别在于没有时间

curtime

  1. 用于返回系统时间,不包含系统日期

可以获取指定部分,年,月,日,小时,分钟,秒

  1. SELECT YEAR(NOW()) 年;
  2. 出现英文需要在函数后面加MONTH
  3. SELECT MONTHNAME(NOW()) 年;

str_to_date:将日期格式的字符转换成指定格式的日期

  1. STR_TO_DATE(‘7-29-2003’,’%Y-%m-%d’) 2003-07-29:
  2. 月份将转为两位
  3. SELECT * FROM employees WHERE hiredate = STR_TO_DATE(‘4-3-1992’,’%c-%d %Y’)

date_format:将日期转换成字符

  1. DATE_FORMAT(‘2003-07-29’,’%Y年%m月%d日’) 将返回2003年07月29日

其它函数

  1. SELECT VERSION();版本号
  2. SELECT DATABASES();查看数据库(注意有s表示复数)
  3. SELECT USER();查看用户

流程控制函数

if函数

  1. if(exp1,exp2,exp3)
  2. exp1是条件表达式,true or false
  3. 如果为true,则返回exp2的值
  4. 如果为false,则返回exp3的值
  5. 和py中的倒装句类似 (正确 if 条件 else 错误)

case函数

  1. case 要判断的字段或表达式
  2. when 常量1 then 要显示的值1或语句1
  3. when 常量2 then 要显示的值2或语句2
  4. else 要显示的值n或语句n
  5. end

等值判断

  1. select salary 原始工资,departmant_id,
  2. CASE department_id
  3. WHEN 30 THEN salary*1.1
  4. WHEN 40 THEN salary*1.2
  5. WHEN 50 THEN salary*1.3
  6. ELSE salary
  7. END AS 新工资
  8. FROM employees;
多重if判断区间
  1. SELECT salary
  2. CASE
  3. WHEN salary>2 THEN ‘A’
  4. WHEN salary>1 THEN ‘B’
  5. ELSE ‘D’
  6. END AS 工资级别
  7. FROM employees;

分组函数

sum

avg

max

min

count