MySQL基础——SQL语句

目录

1.SQL通用语法

2.SQL分类

3 DDL

3.1数据库操作

3.1.1查询

3.1.2创建

3.1.3删除

3.1.4使用

3.2表操作

3.2.1查询

3.2.2创建

3.2.3数据类型

3.2.4表修改(alter打头)

3.2.5表删除(drop/truncate打头)

3.3 DDL总结

3.3.1 DDL-数据库操作

3.3.2.DDL-表操作

4 DML

4.1添加数据(INSERT)

4.2修改数据(UPDATE)

4.3删除数据(DELETE)

4.4 DML总结

5 DQL(查询)

5.1基本查询

5.2条件查询(where)

5.3聚合函数

5.4 分组查询(group by)

5.5排序查询(order by)

5.6 分页查询(limit)

5.7 DQL语句总结

6 DCL语句

6.1用户管理

6.2权限控制

1.SQL通用语法

1.SQL语句可以单行或多行书写,以分号结尾。

2. SQL语句可以使用空格/缩进来增强语句的可读性。

3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

4.注释:

(1)单行注释:--注释内容或#注释内容(MySQL特有)

(2)多行注释:/*注释内容*/

2.SQL分类

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。

3 DDL

对数据库、表、字段的定义操作

3.1数据库操作

3.1.1查询

查询所有数据库:SHOW DATABASES;

例:输入,就可查询当前数据库服务器中所有的数据库,包括我刚刚新建的两个。

查询当前正在使用的数据库:SELECT DATABASE(); #注意括号()不能少!

3.1.2创建

CREATE DATABASE [IF NOT EXISTS]数据库名「 DEFAULT CHARSET字符集][COLLATE 排序规则];

例1:输入create database itcast;

就会创建好名为itcas的数据库:

例2:输入CREATE DATABASE if not exists ithe default charset utf8mb4;

3.1.3删除

DROP DATABASE [ IF EXISTS]数据库名;

例:输入drop DATABASE ithe

然后查询:show DATABASEs

发现就没有ithe这个表了

3.1.4使用

USE 数据库名;

切换到指定的这个数据库,进行使用。

例:输入use library

再查询:SELECT DATABASE()

结果为:

3.2表操作

3.2.1查询

查询当前数据库所有表

也可以用use切换指定数据库,再查询。

查询表结构

DESC表名;

查询指定表的建表语句

SHOW CREATE TABLE表名;

3.2.2创建

逗号分离,最后一个字段没有逗号。通过comment加上对应字段的注释。

示例:

可以用desc+表名 查询表结构:

3.2.3数据类型

(1)数值类型

(2)字符串类型

VARCHAR——VS——CHAR

  1)VARCHAR类型用于存储可变长度字符串,是最常见的字符串数据类型。它比固定长度类型更节省空间,因为它仅使用必要的空间(根据实际字符串的长度改变存储空间)。

  有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储。

  2)CHAR类型用于存储固定长度字符串:MySQL总是根据定义的字符串长度分配足够的空间。当存储CHAR值时,MySQL会删除字符串中的末尾空格(在MySQL 4.1和更老版本中VARCHAR 也是这样实现的——也就是说这些版本中CHAR和VARCHAR在逻辑上是一样的,区别只是在存储格式上)。

  同时,CHAR值会根据需要采用空格进行剩余空间填充,以方便比较和检索。但正因为其长度固定,所以会占据多余的空间,也是一种空间换时间的策略;

如:

用户名username varchar(50)

性别gender char(1)

(3)日期时间类型

没有负数,就要用无符号的,加上关键字unsigned。

例:设计一张员工信息表,要求如下:

1.编号(纯数字)

2.员工工号(字符串类型,长度不超过10位)

3.员工姓名(字符串类型,长度不超过10位)

4.性别(男/女,存储一个汉字)

5.年龄(正常人年龄,不可能存储负数)

6.身份证号(二代身份证号均为18位,身份证中有X这样的字符)

7.入职时间(取值年月日即可)

代码如下:

create table emp(id int comment '编号',empid varchar(10) comment '员工工号',empname varchar(10) comment '员工姓名',sex char(1) comment '性别',age tinyint unsigned comment'年龄',idcard char(18) comment'身份证号',entime date comment'入职时间')

3.2.4表修改(alter打头)

(1)添加字段add

ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT注释][约束];

案例:

为emp表增加一个新的字段“昵称”为nickname,类型为varchar(20)

代码:

alter table emp add nickname varchar(20) comment'昵称'

查询可知已成功添加:

(2)修改字段

1)修改字段数据类型(modify)

ALTER  TABLE 表名 MODIFY 字段名 新数据类型(长度);

2)修改字段名和字段类型(change)

ALTER TABLE表名CHANGE旧字段名 新字段名 类型(长度)[COMMENT注释][约束];

案例:

将emp表的nickname字段修改为username,类型为varchar(30)

代码:在添加字段的代码上修改就是将add改为change,原本一个字段名,改为包含旧和新的两个字段名。

alter table emp change nickname username varchar(20) comment'昵称'

(3)修改表名(rename to)

ALTER TABLE 表名 RENAME TO 新表名;

例:改emp为employee

代码:

alter table emp rename to employee

(4)删除字段

ALTER TABLE表名DROP字段名;

3.2.5表删除(drop/truncate打头)

(1)删除表

DROP TABLE [ IF EXISTS]表名;

(2)删除指定表,并重新创建该表。

TRUNCATE TABLE表名; (数据没有了只有一张空表了)

例:drop table if exists employee

查询显示无employee表了。

3.3 DDL总结

3.3.1 DDL-数据库操作

SHOW DATABASES;

CREATE DATABASE数据库名;

USE数据库名;

SELECT DATABASE();

DROP DATABASE数据库名;

3.3.2.DDL-表操作

SHOW TABLES ;

CREATE TABLE表名(字段字段类型,字段字段类型);

DESC表名;

SHOW CREATE TABLE表名;

ALTER TABLE表名 ADD/MODIFY/CHANGE/DROP/RENAME TO ...;

DROP TABLE表名;

4 DML

MySQL图形化工具,DataGrip>Navicat

但是DataGrip是收费的,有30天免费,可以申请学生邮箱!!!

链接数据库成功,跟我Navicat里面是一样的了。安装并链接好DataGrip后,学习DML。

DataGrip中的schema = database

在上面+操作,下面自己生成SQL语句,真香。

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中的数据记录进行增删改操作。

4.1添加数据(INSERT)

(1)给指定字段添加数据

INSERT INTO表名(字段名1,字段名2,.….)VALUES(值1,值2,....);

(2)给全部字段添加数据(不用写字段名了)

INSERT INTO表名VALUES(值1,值2,...);

(3)批量添加数据(用括号和逗号分隔)

INSERT INTO表名(字段名1,字段名2,...))VALUES(值1,值2,...),(值1,值2...).(值1,值2,...);

INSERT INTO表名VALUES(值1,值2,...).(值1,值2,...), (值1,值2,...);

注意:

·插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

·字符串和日期型数据应该包含在引号中。

·插入的数据大小,应该在字段的规定范围内。

例:

#指定全部字段insert into employee(id, empid, empname,gender,age, idcard, entime) values(1,'1','zhg','n',10,'1234567889','2000-01-12');#指定部分字段
insert into employee (id, empid) values(3,'3');#不用指定,插入全部字段
insert into employee values(2,'2','zhg','n',10,'1234567889','2000-01-12');#批量插入insert into employee values(4,'4','zhg','n',10,'1234567889','2000-01-12'),                            (5,'5','zhg','n',10,'1234567889','2000-01-12'),                            (6,'6','zhg','n',10,'1234567889','2000-01-12'),                            (7,'7','zhg','n',10,'1234567889','2000-01-12');
结果如下:

4.2修改数据(UPDATE)

修改“表名”这个表总的字段数据信息:

UPDATE 表名 SET字段名1=值1 ,字段名2=值2,....[ WHERE条件];

例:

#将id=1的员工名字改为xixiupdate employee set empname='xixi' where id = 1;#将所有员工入职时间改为2008-02-13update employee set entime='2008-02-13'

修改结果如下:

4.3删除数据(DELETE)

DELETE FROM表名[WHERE条件]

注意:

·DELETE语句的条件可有可无,如果没有条件,则会删除整张表的所有数据。

·DELETE语句不能删除某一个字段的值(可以使用URDATE)。

例:

#删除id = 1的员工
delete from employee where id = 1

4.4 DML总结

1.添加数据

INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,..)[,,(值1,值2,...)...];

2.修改数据

UPDATE 表名 SET字段1=值1,字段2=值2[ WHERE条件];

3.删除数据

DELETE  FROM 表名 [WHERE条件];

5 DQL(查询)

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中的记录。查询关键字:SELECT

·DQL-语法

SELECT

        字段列表

FROM

        表名列表

WHERE

        条件列表

GROUP BY

        分组字段列表

HAVING

        分组后条件列表

ORDER BY

        排序字段列表

LIMIT

        分页参数

 # 新建emp
create table emp(id int comment '编号',workno varchar(10) comment '员工工号',name varchar(10) comment '员工姓名',gender char comment '性别',age tinyint unsigned comment'年龄',idcard char(18) comment'身份证号',workaddress varchar(50) comment '工作地址',endate date comment'入职时间');
# 解决DataGrip对出现中文报错,使用如下语句,否则name和gender中只能是英文不能是中文。alter table emp convert to charset utf8;#插入数据
insert into emp (id,workno,name,gender,age,idcard , workaddress,endate)values (1,'1','柳岩','女',20,'123456789012345678','北京','2000-01-01'),(2,'2','张无忌','男',18,'123456789012345670','北京','2005-09-01'),(3,'3','韦一笑','男',38,'123456789712345670','上海','2005-08-01'),(4,'4','赵敏','女',18,'123456757123845670','北京','2009-12-01'),(5,'5','小昭','女',16,'123456769012345678 ','上海','2007-07-01'),(6,'6','杨道','男',28,'12345678931234567X','北京','2006-01-01 '),(7,'7','范瑶','男',40,'123456789212345670','北京','2005-05-01 '),(8,'8','黛绮丝','女',38,'123456157123645670','天津','2015-05-01 '),(9,'9','范凉凉','女',45,'123156789012345678','北京','2010-04-01 '),(10,'10','陈友谅','男',53,'123456789012345670','上海','2011-01-01'),(11,'11','张士诚','男',55,'123567897123465670','江苏','2015-05-01'),(12,'12','常遇春','男',32,'123446757152345670','北京','2004-02-01 '),(13,'13','张三丰','男',88,'123656789012345678','江苏','2020-11-01 '),(14,'14','灭绝','女',65,'123456719012345670','西安','2019-05-01 '),(15,'15','胡青牛','男',70,'12345674971234567X','西安','2018-04-01 '),(16,'16 ','周芷若','女',18, null,'北京','2012-06-01 ');

5.1基本查询

查询例:

#查询多个字段
select name,workno,workaddress adr from emp;

#查询员工地址不能重复并起别名
select distinct workaddress adr from emp;

distinct好像只能紧跟select

5.2条件查询(where)

语法:SELECT 字段列表 FROM 表名 WHERE 条件列表;

案例:

一个下划线_代表一个字符,%匹配任意个字符。

#查询姓名为两个字的员工

select * from emp where name like'__';

#查询身份证最后一位为X的员工

select * from emp where idcard like'%X';

5.3聚合函数

将一列数据作为一个整体,进行纵向计算

常见聚合函数:

语法:SELECT聚合函数(字段列表)FROM表名;

注意:null值不参与所有聚合函数运算

案例:

5.4 分组查询(group by)

有些情况不分组也可以进行聚合运算,只有当前数据记录可以进行该纵向计算。

1.语法

SELECT字段列表FROM表名[ WHERE条件 ] GROUP BY分组字段名[HAVING分组后过滤条件];

2. where与having区别

执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。判断条件不同: where不能对聚合函数进行判断,而having可以。

注意

·执行顺序: where >聚合函数>having

·分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

案例:查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于1的工作地址。

分析:

分组前过滤:年龄小于45的员工——where

分组:工作地址——group by

分组后过滤:员工数量大于等于3的工作地址——having

代码:

select workaddress,count(id) countid from emp where age<45 group by workaddress having count(id) >=1;
分组后,有些字段就是不能同时输出了。

5.5排序查询(order by)

1.语法

SELECT字段列表FROM表名

ORDER BY字段1排序方式1,字段2排序方式2;

2.排序方式

ASC:升序(默认值,所以asc可以省略)

DESC:降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

案例:根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序.

代码:

select * from emp order by age,endate desc;

5.6 分页查询(limit)

(1)语法:

SELECT字段列表FROM 表名LIMIT起始索引,查询记录数;

(2)注意:

·起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数

·分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

·如果查询的是第一页数据,起始索引0可以省略,直接简写为limit 10。

(3)案例:

#查询第1页员工数据,每页展示10条记录

select * from emp limit 0,10;select * from emp limit 10; #起始页为0时可省略,效果同上

#查询第2页员工数据,每页展示10条记录#起始索引 =(页码-1)*页展示记录数 =2-1*10 =10,所以这里其实索引为10
select * from emp limit 10,10;

5.7 DQL语句总结

6 DCL语句

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。因此开发人员不用掌握,主要是DBA数据库管理员进行操作。

6.1用户管理

1.查询用户

USE mysql;

SELECT * FROM user;

2.创建用户

CREATE USER ‘用户名'@'主机名’IDENTIFIED BY‘密码’;

3.修改用户密码

ALTER USER  '用户名'@'主机名’ IDENTIFIED WITH mysql_native_password BY‘新密码’;

4.删除用户

DROP USER '用户名'@'主机名';

6.2权限控制

1.查询权限

SHOW GRANTS FOR‘用户名'@'主机名’;

2.授予权限

GRANT权限列表ON数据库名.表名TO‘用户名'@'主机名';

3.撤销权限

REVOKE 权限列表ON数据库名.表名FROM‘'用户名'@'主机名';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程设计问题---压缩弹簧设计

参考文献&#xff1a; [1] 吴擎, 徐惟罡, 张春江. 基于师生交流机制的改进类电磁机制算法[J]. 计算机集成制造系统, 2020, 26(4): 1033-1042.

CSS 实现个人资料卡

CSS 实现个人资料卡 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"imgBox"><img src"./bg.jpg" /></div><div class"content"><div class"details&quo…

python数据分析---ch11 python数据描述性统计

python数据分析--- ch11 python数据描述性统计 1. Ch11--描述性统计2. 数据集中趋势的度量2.1 平均值2.2 中位数2.3 众数2.4 几何平均值2.5 调和平均值 3. 数据离散趋势的度量3.1 极差3.2 平均绝对偏差(MAD)3.3 方差和标准差3.4 下偏方差和下偏标准差3.5 目标下偏方差和目标下偏…

YOLOv10网络架构及特点

YOLOv10简介 YOLOv10是清华大学的研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑制&#xff08;NMS&#xff09;和优化各种模型组件&#xff0c;YOLOv…

工程设计问题---压力容器设计

参考文献&#xff1a; [1] 吴擎, 徐惟罡, 张春江. 基于师生交流机制的改进类电磁机制算法[J]. 计算机集成制造系统, 2020, 26(4): 1033-1042.

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

基于单片机和GP2Y1010AU粉尘传感器的空气质量检测仪设计

摘要 随着社会的发展,随着工业的发展,其给人们的生活带来很多便利。然而,工业生产过程中会产生很多对人体有害的因素,比如煤炭开采、水泥生产等行业中的粉尘污染。其在各种危害因素中对人体健康的影响最为严重。粉尘对人体的危害最直接、最严重的是引起尘肺病。当粉尘浓度过…

Office办公软件如何下载安装?Office 2021最佳的办公软件安装包资源分享!

Office软件这种文档格式的普及&#xff0c;得益于其高度的兼容性和通用性&#xff0c;使得用户能够轻松地在不同的电脑和平台上打开和编辑文件。 Office软件文档格式的通用性&#xff0c;意味着无论是Windows、macOS还是Linux等操作系统&#xff0c;用户都能无障碍地打开和浏览…

达梦数据库创建用户并授予

需求描述&#xff1a; 1.想创建一个用户&#xff0c;这用户能访问其他3个用户的资源&#xff0c;权限是只读&#xff0c;这种创用户的sql怎么写&#xff1f; 2.怎么修改用户密码呢&#xff1f; 环境&#xff1a; 通用机 一、创建用户并授权 1.创建业务用户步骤 step1:创建…

Unity 3D 物体的Inspector面板

1、Transform&#xff1a;位置、旋转、大小 2、Mesh Filter&#xff1a;物体的形状 3、Mesh Renderer&#xff1a;物体渲染&#xff08;物体的衣服&#xff09; 4、Collider&#xff1a;碰撞体

Orange Pi AIpro:高性能AI开发板开箱体验及样例测试

文章目录 前言背景介绍产品介绍主要参数配置AI处理器——昇腾310 NPU模型训练预测加载resnet50模型真实动物测试虚拟动物测试 前言 随着人工智能和物联网技术的迅速发展&#xff0c;单板计算机&#xff08;Single Board Computer, SBC&#xff09;在创客和开发者社区中越来越受…

电脑意外出现user32.dll丢失的八种修复方法,有效解决user32.dll文件丢失

遇到与 user32.dll 相关的错误通常是因为该文件已损坏、丢失、或者与某些软件冲突。今天这篇文章寄给大家介绍八种修复user32.dll丢失的方法&#xff0c;下面是一步步的详细教程来解决这个问题。 1. 重新启动电脑 第一步总是最简单的&#xff1a;重新启动你的电脑。许多小问题…

springboot依赖管理和自动配置

依赖管理和自动配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starter场景启动器基本介绍官方提供的starter第三方starter 自动配置自动配置基本介绍SpringBoot自动配置了哪些?如何修改默认配置如何修改默认扫描包结构resources\ap…

Vue路由守卫的使用

示例如下&#xff1a;&#xff08;第一张图&#xff09;当你点击车1的时候你写了路由守卫就点不开出现无权访问 &#xff08;第二张图&#xff0c;就是可以访问后的图&#xff09;有路由守卫点不开的情况下当你在本地存储中写了你在路由守卫中写的东西就可以进入了 你需要在r…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

Iptables深入浅出

1、iptables的基本概念 众所周知iptables是Linux系统下自带免费的包过滤防火墙。其实不然&#xff0c;iptables其实不是真正的防火墙&#xff0c;我们可以把它理解成一个客户端代理&#xff0c;用户通过iptables这个代理&#xff0c;将用户的安全设定执行到对应的”安全框架”…

05-5.3.1_1 二叉树的先中后序遍历

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

大家来决定:python-office运行时的提示信息,要不要删除?

​ 大家好&#xff0c;这里是程序员晚枫&#xff0c;今天想请大家投票决定一下&#xff1a;运行python-office时的下面这种中文提示信息&#xff0c;要不要全部都取消了&#xff1f;&#x1f447; 为什么加这个提示&#xff1f; 我是在2022年发布的这个开源项目&#xff0c;并…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0&#xff0c;…

Python编程环境搭建

简介&#xff1a; Python环境安装比较简单&#xff0c;无需安装其它依赖环境&#xff0c;主要步骤为&#xff1a; 1. 下载并安装Python对应版本解释器 2. 下载并安装一个ide编码工具 一、下载并安装Python解释器 1.1 下载 官网地址&#xff1a;Welcome to Python.org 选择…