mysql-增删改查
发布日期:2022-02-17 02:39:52 浏览次数:29 分类:技术文章

本文共 6672 字,大约阅读时间需要 22 分钟。

连接客户端时通过参数指定

shell>mysql -uroot -proot --prompr 提示符
连接上客户端后,通过prompt命令修改
mysql>prompt 提示符
显示当前服务器版本
SELECT VERSION();

+------------+| VERSION()  |+------------+| 5.7.16-log |+------------+

显示当前日期时间

SELECT NOW();

+---------------------+| NOW()               |+---------------------+| 2020-05-23 17:19:26 |+---------------------+1 row in set (0.01 sec)

显示当前用户

SELECT USER();

+----------------+| USER()         |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)

函数:

select database()
现在在哪一个库中;
desc stunifo;
看表中的结构;
show tables from 库名
查看其他库中的表
use 库名
打开指定的库
创建表
create table 表名(
列名 列类型
update stuinfo set name=‘hejia’ where id=1;
更新
insert into stuinfo(id,name) values(1,
‘join’)
;
添加
select * from stuinfo;
查找

基础查询

#查询常量select 100 ;#查询表达式SELECT 100%3;#查询单个字段SELECT last_name FROM employees;#查询多个字段SELECT	last_name,	email,	employee_id FROM	employees;#查询所有字段SELECT	* FROM	employees;# 起别名SELECT USER();# 方式1使用asSELECT USER() AS HJ;# 方式2使用空格SELECT USER()  HJD;#使用concatpinjieSELECT CONCAT(first_name,last_name) AS '姓名' From employees;# DISTINCT的使用去重SELECT DISTINCT department_id FROM employees;#若表中某个数据可能为null则放入ifnullSELECT  IFNULL( ,'空')

1 mysql在windows不区分大小写,在linux中要区分,但建议关键字大写。

2 每条命名用分号结尾
3 注释
单行注释 #注释文字
单行注释 – 注释文字
多行注释 /* */
回来


特点

  1. 查询的结果集是一个虚拟表
  2. select 类似于system.out.println
    select后面跟的查询列表,可以有多个部分组成,中间用逗号隔开
    例如 select 字段1 字段2 表达式from表;
    sout的打印内容,只有一个。
  3. 执行顺序
    select first_name from employees;
    先去from查看表,再去select筛选。
  4. 查询列表可以是:字段、表达式、常量、函数。
  5. mysql中的+
    1.加法运算
    两个操作数都是数值型
    100+1.5
    其中一个操作数为字符型,将字符型数据强制转换成数值型,如果无法转换,则直接当成0处理
    其中一个为null 则结果为null

条件查询

select 查询列表

from 表名
where 筛选条件
执行顺序
1.from语句
2.where语句
3.select语句
特点:按条件表达式筛选
关系运算符:> < >= <= <>
!=也可使用,但不建议
逻辑运算符:and or not
3.模糊查询
like
in
between and isnull
like
功能 一般和通配符搭配使用,对字符型数据进行部分匹配查询常见的通配符:
_任意单个字符
%任意多个字符
若想查询的字符包括_或%

SELECT *FROM employeesWHERE last_name like '_$_%'ESCAPE '$';

同理还有not like

in
功能:查询某字段的值是否属于指定的列表之内
a in(常量1,常量2,常量3,…)也不一定非要是常量
如我想查询id为30 ,60 ,70

SELECT idFROM employeesWHERE id IN(30,60,70);

同理还有not in;

3.between and
功能:判断某个字段的值是否介于XX之间
SELECT department_id
FROM employees
WHERE id BETWEEN 30 ADN 90;
不可颠倒

排序查询

语法

select 查询列表
from 表名
where 筛选条件
order by 排序查询
执行顺序:

  1. from
  2. where
  3. select
  4. order
    特点:
    1.排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合。
    2升序 通过asc ,默认行为
    降序 通过desc
# 按单个排序SELECT   * FROM   employees WHERE   employee_id > 120 ORDER BY   salary DESC;# 按表达式排序对有奖金的员工,按年薪排序SELECT   *,   salary * 12 *(   1 + IFNULL( commission_pct, 0 )) 年薪 FROM   employees ORDER BY   salary * 12 *(   1 + IFNULL( commission_pct, 0 )) DESC;#按别名排序SELECT   *,   salary * 12 *(   	1 + commission_pct    ) 年薪 FROM   employees WHERE   commission_pct IS NOT NULL ORDER BY   年薪 DESC;#按函数的结果排序#案例1 按姓名的字数长度进行升序SELECT   last_name FROM   employees ORDER BY   LENGTH( last_name );   # 按多个字段排序-- 	查询员工的姓名、工资、部门编号。先按工资排序,再按部门编号排序SELECT   salary,   employee_id FROM   employees ORDER BY   salary ASC,   employee_id DESC;   #按列数排序SELECT   * FROM   employees ORDER BY   2;

数据库相关概念

DB:database数据库,存储一系列有组织数据的容器

DBMS:Database Management System数据库管理系统,使用DBMS管理和维护DB
SQL:StructureQueryLanguage结构化查询语言,程序员用于和DBMS通信的语言。

数据库存储数据的特点

  1. 数据先放在表中,表再放在库中
  2. 一个库可以有多张表,每张表都有自己唯一的标识名
  3. 一张表的设计,类似于java中的类的设计 表中的字段的设计,类似于属性的设计
    表中的单条记录,类似于对象
    表中的所有记录类似于对象的集合
    orm: object relation mapping 对象关系映射

mysql特点

  1. 体积小、安装较方便
  2. 开源、除企业版免费
  3. 性能好,稳定性高
  4. 兼容性好

常见的函数

函数 相当于java中学过的方法,为了解决某个问题,将编写的一系列的命令集合封装在一起,对外仅仅暴露方法名,供外界使用。

  1. 自定义方法(函数)
  2. 调用方法(函数)
    叫什么:函数名
    干什么:函数功能
    常见函数:
    字符函数
    数学函数
    日期函数
    流程控制函数
  3. concat 拼接字符
  4. LENGTH 获取字节长度
    SELECT LENGTH(‘hello,hejia’)
  5. CHAR_LENGTH 获取字符个数
  6. SUBSTRING 截取子串
    sql中的起始索引从1开始,
    SELECT SUBSTR(str,起始索引,截取的字符长度)
    有重载substr(str,起始索引)
  7. insert获取字符第一次出现的索引
    SELECT INSERT(‘三打白骨精啊啊啊、白骨精’,‘白骨精’)
  8. trim 去前后指定的字符 默认空格
    SELECT TRIM(’ 虚 竹 ');
    SELECT TRIM(‘x’ FROM ‘xxxx虚竹xxxx’)
  9. LPAD/RPAD 左填充/右填充
    SELECT LPAD(‘木婉清’,10,‘a’);
  10. UPPER/LOWER 变大写/变小写
  11. STRCMP 比较两个字符大小
  12. LEFT/RIGHT 截取子串
    数学函数
  13. ABS 绝对值
    SELECT ABS(-2.4);
  14. CEIL 向上取整
    SELECT CEIL(1.09);
  15. FLOOR 向下取整
  16. ROUND 四舍五入
  17. TRUNCATE 截断
    SELECT TRUNCATE(1.8712345,1);
    1.8
  18. MOD 取余
    SELECT MOD(-10,3);
    日期函数
    1.NOW
    SELECT NOW();
  19. CURDATE
    SELECT CURDATE();
  20. CURTIME
    SELECT CURTIME();
  21. DATEDIFF
    SELECT DATEDIFF(‘1998-7-16’,‘2019-7-13’)日期之差 前减去后 这个出来就是负数
  22. DATE_FORMAT(‘1998-7-16’,’%Y年’)

分组函数(聚合函数)

说明:

分组函数往往用于实现一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数
分数函数

  1. sum(字段名)
    将该字段所有值求和
  2. avg(字段名)
    求平均数
  3. max
  4. min
  5. count 计算非空字段个数
    count的补充介绍
    SELECT COUNT()
    直接用于该结果的总行数
    select count(
    )from xxx where xxx;
    则count用于筛选后
    SELECT count(1)等于每一行加了个常量列 和效果一样但更好(效率高,语义好)
    搭配distinct就可实现去重

分组查询

当需要分组查询时需要使用GROUP BY 子句,例如查询每个部门的工资和,这说明要使用部分来分组

select 查询列表
from 表名
where 筛选条件
group by 分组列表;
特点

  1. 查询列表往往是,分组函数和被分组的字段
  2. having用作分组前筛选
  3. 执行顺序:在这里插入图片描述

sql 92语法

  1. 内连接
    等值连接
    select 查询列表
    from 表名1 表名2
    where 等值连接的连接条件
    特点
    为了解决多表中的字段重名问题,往往为表起别名
    表的顺序无要求
    起了别名 表名就无法查询(查询顺序from在前)
    若有筛选条件可直接在where上AND

非等值

将等于符号改作其他符号
例如

想查询员工的工资和工资级别SELECT salary,grade_levalFROM emplyees e, job_grades gWHERE salary BETWEEN g.lower_sal AND g.highest_sal;

自连接

列如在员工中找领导 第一次是当中员工表 第二次当做领导表

SELECT e.employee_id,e.last_name,m.employee_id,m.last_nameFROM employees e,employees mwhere e.manager_id=m.employee_id;

截图

在这里插入图片描述
在这里插入图片描述

sql99语法

内连接

等值连接
select 查询列表
from 表1 别名
(inner) join 表2别名
on 连接条件
where 筛选条件
外连接
应用查询 :用于查询一个表中有,另外一个表中没有
特点

  1. 外连接的查询结果为主表中所有记录
    如果从表中有和它匹配的,则显示匹配的值
    如果从表中没有和它匹配的,则显示null
    外连接查询结果=内连接结果+主表中有从表中没有
  2. 左外连接:left左边的是主表
    右外连接 right join 右边的是主表
  3. 左外和右外交换两个表的顺序,可以实现同样的效果
SELECT b.name,bo.*FROM beauty bleft JOIN boys boON b.boyfriend_id=bo.id;

全外查询

内连接+表1中有表2无+表2有表1中无

full outer
mysql不支持

交叉连接

使用cross 结果是笛卡尔乘积

子查询

含义

出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
分类
按子查询出现的位置
select后面
仅仅支持标量子查询
from后面
支持表子查询
where或having后面
支持标量子查询
列子查询 (多行子查询)
行子查询
特点
子查询放在小括号内
子查询一般放在条件的右侧
标量子查询,一般搭配单行操作符
列子查询,一般搭配着多行操作符
in ,any/some all
in/not in 等于列表中的任意一个
any|some 和子查询返回的某一个值比较
例如a>any(10,20,30) 只要大于其中任一个
All 和子查询返回的所有值比较
行子查询(结果一行多列,或则多列多行)
筛选条件都为一样的操作符
exists后面(相关子查讯)

按结果集的行列数不同:

标量子查询(按结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集)
# 表
 创建表:
CREATE TABLE 表名(
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】,
);
a) 修改之添加列:给stus表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));
b) 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stus MODIFY gender CHAR(2);
c) 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stus change gender sex CHAR(2);
d) 修改之删除列:删除stsu表的classname列:
ALTER TABLE stus DROP classname;
e) 修改之修改表名称:修改stu表名称为student:
ALTER TABLE stus RENAME TO student;

主键

当某一列添加了主键约束后,那么这一列的数据就不能重复出现。这样每行记录中其主键列的值就是这一行的唯一标识。例如学生的学号可以用来做唯一标识,而学生的姓名是不能做唯一标识的,因为学习有可能同名。

主键列的值不能为NULL,也不能重复!
  指定主键约束使用PRIMARY KEY关键字

创建表:定义列时指定主键:

CREATE TABLE stu(

sid CHAR(6) PRIMARY KEY,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
创建表:定义列之后独立指定主键:

CREATE TABLE stu(

sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHAR(10),
PRIMARY KEY(sid)
);
修改表时指定主键:
ALTER TABLE stu ADD PRIMARY KEY(sid);
删除主键(只是删除主键约束,而不会删除主键列):
ALTER TABLE stu DROP PRIMARY KEY;

转载地址:https://blog.csdn.net/qq_39814938/article/details/106426714 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql不是内部或外部命令,也不是可运行的程序 或批处理文件的其中一个解决方案
下一篇:在IDEA使用了@test以后无法在控制台输出

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月23日 22时52分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

s2-045 php exp,S2-045-EXP.py --Struts2任意代码执行漏洞 (S2-045,CVE-2017-5638) 2019-04-21
linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。... 2019-04-21
c语言程序设计 科学出版社习题答案,C语言程序设计(科学出版社)第4章 课后习题参考答案.doc... 2019-04-21
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错... 2019-04-21
deepin linux 2014安装,2014.2版本的Deepin虚拟机安装浅谈(就是深度Linux) 2019-04-21
android 限速工具,Android下载器之限速篇 2019-04-21
html刷新ajax实现原理,AJAX的原理—如何做到异步和局部刷新 2019-04-21
html中列表菜单加文字请选择,html中下拉菜单 2019-04-21
读书郎平板中android,读书郎学生平板电脑怎么用 使用方法详解【图文】 2019-04-21
html5 调用摄像头 支持IE,JS调用本地摄像头拍照(兼容各大浏览器及IE8+) 2019-04-21
rust和gta5哪个吃配置_盘点4款Steam“自由度”很高的游戏,GTA5众所周知,目前最热门... 2019-04-21
es审计日志_elasticsearch 事务日志translog 2019-04-21
dw1510_超低温种子储存柜 2019-04-21
文件未找到mathpage.wll_解决MathPage.wll文件找不到的问题(找了好久的良心之作)... 2019-04-21
广州刷脸支付骗局_刷脸支付是骗局?那可能你还不了解刷脸支付 2019-04-21
java 远程调试 端口_JAVA远程调试 2019-04-21
java 使用或覆盖了已过时的api_JAVA使用或覆盖了已过时的 API 2019-04-21
java 图片旋转保存_Java 对图片90度旋转 2019-04-21
用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)... 2019-04-21
java gc的几种方式_GC 的三种基本实现方式 2019-04-21