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的员工名字改为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.mfbz.cn/a/714590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision&#xff0c;本软件代码架构更加合理&#xff0c;且新增ui设计器、原来的vb脚本改为C#脚本&#xff0c;并尝试将视觉与运动控制相结合&#xff0c;是一体化的框架。 对源码有需求的&#xff0c;订阅本专栏后&#xff0c;私信我领取。

用python纯手写一个日历

一、代码 # 月份名称数组 months ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", &qu…

JVM如何确定方法调用

方法调用并不等同于方法执行&#xff0c;方法调用阶段唯一的任务就是确定调用哪一个方法&#xff0c;不涉及方法内部的具体运行过程。在程序运行时&#xff0c;进行方法调用是最普遍、最频繁的操作&#xff0c;但Class文件的编译过程中不包含传统编译中的连接步骤&#xff0c;一…

Python | 中心极限定理介绍及实现

统计学是数据科学项目的重要组成部分。每当我们想从数据集的样本中对数据集的总体进行任何推断&#xff0c;从数据集中收集信息&#xff0c;或者对数据集的参数进行任何假设时&#xff0c;我们都会使用统计工具。 中心极限定理 定义&#xff1a;中心极限定理&#xff0c;通俗…

英语学习笔记36——Where ... ?

Where … ? ……在哪里&#xff1f; 词汇 Vocabulary beside prep. 在……旁边 同义词&#xff1a; near by 构成&#xff1a;be side side n. 边 搭配&#xff1a;side walk 人行道 例句&#xff1a;Bobby在我旁边。    Bobby is beside me. off prep. 离开&#xff…

【数据库编程-SQLite3(一)】sqlite3数据库在Windows下的配置及测试

学习分析 1、资源准备2、环境配置2.1、将资源包下载解压缩保存。2.2、在QT中创建工程,配置环境 3、测试配置3.1、 sqlite3_open函数3.2、sqlite3_close函数3.3、代码测试 1、资源准备 资源包 2、环境配置 2.1、将资源包下载解压缩保存。 解压缩得到以下文件 2.2、在QT中创建…

30 天 52% 回报:GPT-4o 量化交易机器人

本文介绍了如何利用GPT-4o&#xff0c;结合量化交易技术创建盈利的交易机器人策略&#xff0c;并通过回溯测试验证这一策略的有效性。原文: 52% Returns in 30 Days: Your GPT-4o Quant Trading Bot Strategy 量化交易可以盈利&#xff0c;但只有拥有丰富资源、拥有编码和数学技…

解决 Vue-Element-admin 后台请求Uncaught (in promise) Object

文章目录 问题描述原因分析解决方案 问题描述 前端Vue-Element-admin与SpringBoot后端对接login接口后&#xff0c;后端login接口正常响应&#xff0c;但在前台无法登入系统&#xff0c;浏览器控制台报了 Uncaught (in promise) Object 错误。 报错详情如下所示&#xff1a;…

不一样的SYSTEM APP(SYSTEM flag和system_prop区别)

1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…

Linux中的yum和vim

Linux软件包管理 一.什么是软件包二.如何查看软件包二.如何安装软件三.vim编辑器3.1在vim编辑器中有三种模式&#xff0c;即命令模式插入模式低行模式 3.2vim的基本操作3.3vim末行模式命令集 一.什么是软件包 有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上…

Android 自定义View

我们所有的试图都是起源于自定义View&#xff0c;包括ViewGroup也是继承于它&#xff0c;可以说它是视图组件之父。 我们可以从它的大致流程来分为四个部分&#xff1a; 构造方法&#xff0c;onMeasure&#xff0c;onLayout&#xff0c;onDraw 构造方法&#xff1a; 它主要有…

14 学习PID--步进电机梯形加减速实现原理

步进电机加减速使用的场景有那些呢&#xff1f;为什么要使用加减速呢&#xff1f; 硬件驱动细分器与软件的细分参数或定时器分频参数设置不当时启动电机时&#xff0c;会遇见步进电机有啸叫声但是不会转动&#xff0c;这是因为软件产生脉冲的频率大于步进电机的启动频率&#x…

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

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

2024/6/16周报

文章目录 摘要Abstract文献阅读题目问题本文贡献方法aGNN输入和输出模块嵌入模块编码器和解码器模块&#xff1a;支持多头注意的GCN多头自注意力机制GCN模型解释&#xff1a;SHAP 案例研究地下水流动与污染物运移模型研究场景设计 数据集实验结果 代码复现结论 摘要 本周阅读了…

Java项目之消息队列(手写java模拟实现mq)【七、⽹络通信协议设计、消息队列服务器端实现、客户端实现】✔ ★

⼗⼀. ⽹络通信协议设计 定义 Request / Response /** 表示一个网络通信中的请求对象. 按照自定义协议的格式来展开的*/ public class Request {private int type;private int length;private byte[] payload;public int getType() {return type;}public void setType(int typ…

AI探索:最佳落地应用场景

如果说今年的风口&#xff0c;那一定是 AI。不过AI像一把双刃剑&#xff0c;既有助益也有风险。我们将从IBM Watson的高飞与坠落&#xff0c;到Google Allo的黯然失色&#xff0c;探索AI应用中的教训。同时&#xff0c;瑞幸咖啡的成功故事展现了凭借策略得当的AI应用&#xff0…

PTA 6 - 20 汉诺塔问题(py 递归)

这道题是一道比较典型的递归问题&#xff0c;他跟斐波那契数列的本质是一样的&#xff0c;大家自己动手推理一下&#xff0c;非常好推 参考代码&#xff1a; def hanoi(n,a,b,c):global stepif n 1:print(a,"->",c)step 1else:hanoi(n-1,a,c,b)print(a,"…

msvcp120.dll丢失原因分析与解决方法分享

msvcp120.dll 是一个动态链接库&#xff08;Dynamic Link Library, DLL&#xff09;&#xff0c;属于 Microsoft Visual C 2013 再发行组件包的一部分。它提供了 C 标准库的实现&#xff0c;使得使用 C 编写的应用程序能够在运行时动态链接到该库&#xff0c;从而访问其提供的函…

【云岚到家】-day03-1-门户等缓存方案选择

【云岚到家】-day03-1-门户-缓存方案选择 1 门户1.1 门户简介1.2 常见的技术方案1.2.1 需求1.2.2 常见门户1.2.2.1 Web门户1.2.2.2 移动应用门户1.2.2.3 总结 2 缓存技术方案2.1 需求分析2.1.1 界面原型2.2.2 缓存需求 3 SpringCache入门3.1 基础概念3.1.1 Redis客户端3.1.2 Sp…

ping: www.baidu.com: 未知的名称或服务(IP号不匹配)

我用的是VMware上的Red Hat Enterprise Linux 9&#xff0c;出现了能联网但ping不通外网的情况。 问题描述&#xff1a;设置中显示正常连接&#xff0c;而且虚拟机右上角有联网的图标&#xff0c;但不能通外网。 按照网上教程修改了/etc/resolv.conf和/etc/sysconfig/network-…