mysql操作
mysql操作
关系型数据库
本质上是说这类数据库有多张表,通过关系彼此关联
sys是Mysql自己内部运行用的数据库
shemas
着重号的使用:
- 区分字段和关键字
- 例如:NAME本身是关键字,加``着重号后会变色,便于区分
tables
- 存储数据的地方
点击最右侧的表格图标
- 显示出的数据每一行为一个数据,用id来唯一区分
views
- 视图,将不同表的数据组合到一起
stored procedures
- 存 储过程
- 用来查询数据
functions
- 函数
- 存储再数据库里的项目
码风
- 大写mysql关键字,小写其余内容
button
- Query中的execute是执行所有的sql
关键字
use
查询常量值:
逻辑顺序:
- 先用from找到表
- where走筛选
- 最后select走查询
FROM
- 指名想要查询的表
- select * from some_table:先库后id最后table
- 和py中的from random import choice 有异曲同工之处
调用大小级关系
- 调用库用USE
- 调用列用select
- 调用table用FROM
select语句
- 选择某一列
- 先后顺序根据参数的前后顺序决定
- DISTINCT为消除重复项(列中参数的重复项)
where语句
- 日期参数默认是year-month-date:四位year,两位month,两位date
分类:
- 使用条件表达式筛选:条件运算符:> < = != <> <= >=
- 按照逻辑表达式筛选:逻辑运算符:&& || ! and or not
- 模糊查询:like; between and; in; is null;
参数:and ;not; or;in;between;like,regexp
参数特点:
not
- WHERE NOT(ID != 10 AND CountryCode = “AFG”)即可产生ID != 10 AND CountryCode = “AFG”的反面
in
- in:简化or的写法,即WHERE Name = a OR Name = b OR Name = c == WHERE Name IN (‘a’,’b’,’c’);字符型的值必须使用单引号引起来;当某一位为下划线的时候’_’
- in列表的值类型必须统一
- 相当于=,不能用通配符’%’和’_’
between and
- between:当要将一个属性同一个范围值相比较简化AND的写法:WHERE points >= 1000 AND points <= 3000 == WHERE points BETWEEN 1000 AND 3000(闭区间取值);两个临界值不能颠倒(先大于等于,后小于等于)
like
- LIKE:%表示any number of characters;_表示single character
regexp
- REGEXP:regular expression(正则表达式),用异或^来表示字符串开头,用美元$来表示字符串末尾,用|来表示多个寻找,用[‘]’来表示下一个字符从某个列表中寻找,在[]中用-来表示从哪到哪(a-h即为abcdefgh)
null
- null不能够使用=和<>
- ifnull(exp1,exp2):当exp1为null时将返回exp2,否则将返回exp1
正则表达式:
- ^ beginning
- $ end
- | logical or
- [abcd] any choice
- [a-f] surrounding
- <=> 安全等于,既可以用Null和数值等于
schemas中的每一个table的设置
- 第一行带黄色感叹号的是这张表的主键列,每一个table中都有一个
order by
- 排序,例:SELECT Name,CountryCode FROM city ORDER BY 1,2(即Name,CountryCode)
- 即将按照Name先排序,后按照CountryCode进行排序
- asc是升序排序
- desc是降序排序
- SELECT * FROM employees ORDER BY salary DESC;
- SELECT * FROM employees ORDER BY salary ASC;(asc可以省略)
limit n
内链接:同一个库中不同表格的链接
- 联合记录:on语句,例:JOIN customers ON orders.customer_id = customers.customer_id
- 加表格名前缀使列可以用,防止ambigous
- 使用别名避免重复,紧跟在每个表后使用别名
跨数据库链接:不同数据库之间的链接
- 未使用USE的数据库记得加上前缀
为字段起别名
便于理解,如果要查询的字段有重名的情况,使用别名可以区分开来
方式1:AS
- select 100*98 AS 替换后的名字;
- select last_name AS 姓,first_name AS 名 FROM table;
方式2:空格
- select last_name 姓,first_name 名 FROM table;
案例:
- 当有空格,井号等特殊符号时需要加单双引号
- SELECT salary AS “out put” FROM employees;
去重
在字段前加上字段DISTINCT
- SELECT DISTINCT department_id FROM employees;
+的作用
仅仅只有一个功能:运算符
只要有一个操作数为字符串,起连接符作用的java中+作用在mysql中不存在
- 当其中一方为字符型,试图将字符型数据转换为数值型,成功则继续做加法运算,失败则将字符型数据转换为0
- SELECT ‘123’ + 90得出213
- SELECT ‘join’ + 90得出90
- 当一方为null则结果肯定为null(没有底数怎么加都没有结果)
函数:
分类
- 单行函数:contact length ifnull等只有一个返回值的函数
- 分组函数:做统计使用,缩小返回值的量,统计函数,聚合函数,组函数
concat
- SELECT CONTACT(‘a’,’b’,’c’) AS 结果;得出abc
字符函数
length(是字节长度)
- select length(‘join’) 4
- select length(‘张三疯hahaha’) 15(看字符集判断汉字字节长度)
concat拼接字符串
- SELECT CONCAT(last_name,’-‘,first_name) FROM employees;
upper,lower
- SELECT UPPER(‘join’); JOIN
实例:将姓变大写,将名变小写
- SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
substr,substring
索引从1开始
- SELECT SUBSTR(‘abcdef’,from) out_put:将从from到最后的字符选择
截取指定长度的字符(一定是字符长度)
- SELECT SUBSTR(‘abcdef’,from,end) out_put
姓名用首字符大写,其他字符用小写后用——拼接
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),’_’,LOWER(SUBSTR(last_name,2)));
instr
- 用于返回字符的起始索引
- SELECT INSTR(‘abcdef’,’def’) AS out_put
- 如果找不到返回0
trim:
- SELECT TRIM(‘ abcde ‘) AS out_put
- 去掉字符串两侧的空格
- python中是strip或者replace
删去a:
- SELECT TRIM(‘a’ FROM ‘aaaaaaaa人名aaaaaaaaa人名aaaaa’)将删去两侧的a,中间的a不会删去
lpad
- 用指定的字符实现左填充指定长度
- SELECT LPAD(‘人名名’,10,’*’)
rpad
- 用指定字符实现右填充
- 参数:待填充字符串,填充后长度,用于填充的字符串
replace
- SELECT REPLACE(‘abcdefabcdef’,’a’,’b’) AS out_put
- 将字符串中的所有a和b都删去
- 参数:待删除字符串,后面都是需要删除的字符
数学函数
ceil
- 向上取整
- 返回大于等于该参数的最小整数
floor
- 向下取整
- 返回小于等于该参数的最大整数
truncate
- 截断,无论后面是什么,都会四舍五入
- SELECT TRUNCATE(1.69999,1) AS out_put:返回1.6
mod
- SELECT MOD(10,3);
- 相当于SELECT 10 % 3;
- 被除数如果为正,则结果为正,否则为负
- a-a/b*b (除数一定返回的是整数,即被整除的值)
日期函数
now
- 用于返回系统日期+时间
curdate
- 用于返回系统日期,没有时间
- 与now的区别在于没有时间
curtime
- 用于返回系统时间,不包含系统日期
可以获取指定部分,年,月,日,小时,分钟,秒
- SELECT YEAR(NOW()) 年;
- 出现英文需要在函数后面加MONTH
- SELECT MONTHNAME(NOW()) 年;
str_to_date:将日期格式的字符转换成指定格式的日期
- STR_TO_DATE(‘7-29-2003’,’%Y-%m-%d’) 2003-07-29:
- 月份将转为两位
- SELECT * FROM employees WHERE hiredate = STR_TO_DATE(‘4-3-1992’,’%c-%d %Y’)
date_format:将日期转换成字符
- DATE_FORMAT(‘2003-07-29’,’%Y年%m月%d日’) 将返回2003年07月29日
其它函数
- SELECT VERSION();版本号
- SELECT DATABASES();查看数据库(注意有s表示复数)
- SELECT USER();查看用户
流程控制函数
if函数
- if(exp1,exp2,exp3)
- exp1是条件表达式,true or false
- 如果为true,则返回exp2的值
- 如果为false,则返回exp3的值
- 和py中的倒装句类似 (正确 if 条件 else 错误)
case函数
- case 要判断的字段或表达式
- when 常量1 then 要显示的值1或语句1
- when 常量2 then 要显示的值2或语句2
- else 要显示的值n或语句n
- end
等值判断
- select salary 原始工资,departmant_id,
- CASE department_id
- WHEN 30 THEN salary*1.1
- WHEN 40 THEN salary*1.2
- WHEN 50 THEN salary*1.3
- ELSE salary
- END AS 新工资
- FROM employees;
多重if判断区间
- SELECT salary
- CASE
- WHEN salary>2 THEN ‘A’
- WHEN salary>1 THEN ‘B’
- ELSE ‘D’
- END AS 工资级别
- FROM employees;
分组函数
sum
avg
max
min
count
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 h3110w0r1d's Blog!