MySQL基础——SQL语句

news2024/12/24 2:51:28

目录

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的员工名字改为xixi

update employee set empname='xixi' where id = 1;

#将所有员工入职时间改为2008-02-13

update 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.coloradmin.cn/o/1829132.html

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

相关文章

EasyRecovery2024最新免费手机微信聊天记录数据恢复神器!

今天我要给大家种草一款神奇的软件——EasyRecovery&#xff01;&#x1f389;&#x1f389; 你是不是曾经遇到过文件丢失、电脑崩溃、硬盘损坏等让人抓狂的问题&#xff1f;&#x1f62d;&#x1f62d;别担心&#xff0c;EasyRecovery就是你的救星&#xff01; &#x1f31f;&…

UniApp或微信小程序中scroll-view组件使用show-scrollbar在真机Android或IOS中隐藏不了滚动条的解决办法

show-scrollbar 属性 不论是使用 变量 还是直接使用 布尔值或者直接使用 css 都是在 ios、Android 上是都没有效果。。 真机中还是出现滚动条 解决办法 添加下面CSS ::-webkit-scrollbar {display: none;width: 0 !important;height: 0 !important;-webkit-appearance: no…

uniapp实现路由拦截——遇到问题(三)

uniapp路由拦截开发过程中遇到问题 文章目录 uniapp路由拦截开发过程中遇到问题App 无法退出应用监听返回数据结构解决方式模拟原生物理返回键提示不提示&#xff0c;直接退出应用 微信小程序 登录成功返回页面报错效果图不同平台来源页面数据结构解决方式 App 无法退出应用 安…

从0开始理解DevOps

目录 一、DevOps背景 二、DevOps介绍 DevOps 组成 三、Jenkins Jenkins 工作流程 四、云原生与DevOps 相信你一定听过 DevOps 这个词&#xff0c;那它到底是什么呢&#xff1f;为什么越来越多的互联网企业都在追随使用它&#xff1f;它与云原生有什么关系&#xff1f;本文将…

14.带basic认证的registry仓库

带basic认证的registry 安装httpd-tools工具&#xff0c;将账号密码重定向到指定路径下的文件 yum install httpd-tools -y mkdir /opt/registry-var/auth/ -p htpasswd -Bbn quyunlong 123456 >> /opt/registry-var/auth/htpasswd每次追加密码文件htpasswd&#xff…

ROS机器人小车建模仿真与SLAM

文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件&#xff1a;4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF ​ URDF&#xff…

Science:如何快速完成一篇研究性论文?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 完成一篇研究性论文&#xff0c;是将长时间积累的研究成果凝聚在几页纸中&#xff0c;对资深科学家而言也是一大挑战。作者们需要在充分论述科学问题和详细展示结果之间找到平…

实现贪吃蛇小游戏【简单版】

1. 贪吃蛇游戏设计与分析 1.1 地图 我们最终的贪吃蛇大纲要是这个样子&#xff0c;那我们的地图如何布置呢&#xff1f; 这里不得不讲⼀下控制台窗口的⼀些知识&#xff0c;如果想在控制台的窗口中指定位置输出信息&#xff0c;我们得知道该位置的坐标&#xff0c;所以首先介…

【YOLOv10轻量级涨点改进:block优化 | 华为诺亚2023极简的神经网络模型 VanillaNet】

本文属于原创独家改进:一种极简的神经网络模型VanillaNet,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块 计算量参数量比较,8.4 GFLOPs降低至6.1 GFLOPs YOLOv10n summary: 385 layers, 2709380 parameters, 2709364 gradients, 8.4 GF…

基于C#开发web网页管理系统模板流程-参数传递

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 当用户长时间未在管理系统界面进行操作&#xff0c;或者用户密码进行了更改&#xff0c;显然用户必须重新登录以验证身份&#xff0c;如何实现这个功能呢&#xff1f; HTTP Cookie&#xff08;也叫 …

【尚庭公寓SpringBoot + Vue 项目实战】房间管理(十二)

【尚庭公寓SpringBoot Vue 项目实战】房间管理&#xff08;十二&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】房间管理&#xff08;十二&#xff09;1、业务介绍2、逻辑模型介绍3、接口开发3.1、保存或更新房间信息3.2、根据条件分页查询详细信息3.3、根据id获…

缠论再研究1-顶底分型

由于现在不是全职写程序了&#xff0c;看起来不是那么辛苦&#xff0c;终于有点精力重新研究缠论了。 之前做过几个月期货&#xff0c;发现真是太难了&#xff0c;布鲁克斯的书写的好是好&#xff0c;终归还是太过复杂&#xff0c;一时半会吸收不了&#xff0c;加之我们程序员…

【招联消费金融股份】有限公司2024年5月19日【算法开发岗暑期实习】二面试经验分享

招联消费金融股份有限公司2024年5月18日面试经验分享 面试流程&#xff1a;30分钟 面试流程&#xff1a;30分钟 先自我介绍3分钟然后介绍论文和实习&#xff0c;细细问。问对招联了解多少&#xff1f;对实习地点怎么样&#xff1f;反问&#xff0c;正常聊天。 创作不易&#x…

110.平衡二叉树

给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 题解&#xff1a;平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点&#xff0c;得到其高度&#xff0c;在判断高度时不可避免的要用到其左右子树的高度&#xff0c;所以可以顺便判断出…

ElasticSearch地理空间数据了解

ElasticSearch地理空间数据了解 使用场景 Elasticsearch 的地理空间数据处理功能在现代社会中有着广泛的应用&#xff0c;以下是一些常见的使用场景和方向&#xff1a; 1. 位置搜索和导航 本地服务发现&#xff1a;应用程序可以使用 Elasticsearch 查找用户附近的餐馆、商店…

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文&#xff0c;关键点是安装JDK和Hadoop的配置&#xff0c;为避免引用文章变收费&#xff0c;我把关键信息摘录如下&#xff1a; jdk安装和配置就不说了(我本机安装了1.8/15/17/21&#xff0c;以17为主&#xff09;&#xff0c;hadoop安装过程…

基于 SSM 框架的二手书交易系统

基于 SSM 框架的二手书交易系统 一、项目介绍二、项目技术栈三、项目运行四、项目演示总结 大家好&#xff0c;这里是程序猿代码之路。在当今环保意识日益增强和资源节约型社会建设的背景下&#xff0c;二手交易作为一种节省资源和降低成本的消费方式越来越受到人们的欢迎。特别…

自定义MyBatis插件

插件原理回顾 在前面&#xff0c;我们通过 MyBatis插件机制介绍与原理 分析了 MyBatis 插件的基本原理&#xff0c;但是可能还只是理论上的分析&#xff0c;没有实战的锻炼可能理解的还是不够透彻。接下来&#xff0c;我们通过自定义插件实例来进一步深度理解 MyBatis 插件的插…

【gitcode】idea 在本地拉取和push本地代码到gitcode仓库

【首次使用】 1、idea 拉取代码&#xff0c;很容易这里就不记录了。 2、push代码时&#xff0c;总是弹窗登录输入在gitcode.com登录能成功。但是在idea 怎么都不成功。控制台提示 remote: HTTP Basic: Access denied fatal: Authentication failed for ******* 认证失败 3…

如何解决javadoc一直找不到路径的问题?

目录 一、什么是javadoc二、javadoc为什么会找不到路径三、如何解决javadoc一直找不到路径的问题 一、什么是javadoc Javadoc是一种用于生成Java源代码文档的工具&#xff0c;它可以帮助开发者生成易于阅读和理解的文档。Javadoc通过解析Java源代码中的注释&#xff0c;提取其…