SQL基础语法

一:构建数据库和表的语法,字段数据类型

[En]

One: syntax for building database and table, field data type

1:建库建表语法

create (创建,关键字) database (数据库,关键字)

IF NOT EXISTS 作用:如果需要创建的库已存在,将不会创建

DEFAULT CHARSET 作用: 指定默认字符集

CREATE DATABASE IF NOT EXISTS name DEFAULT CHARSET utf8;

use 作用:通过数据库名指向数据库

table :建表关键字

use  name;
create table if not exists test(字段1 数据类型 (长度) 约束条件,字段2 数据类型 (长度) 约束条件...)DEFAULT CHARSET=utf8;

2:常见字段类型有:

1:整数型。

int:标准整型。使用4个字节存储(常用)。

bigint:大整型。使用8个字节进行存储。

1.2:小数型。

float:单精度。占用4个字节存储数据,精度范围大概为7位左右。

double:双精度浮点型 16位精度 使用8个字节进行存储。

2:字符串类型。

char(n):固定长度,最多255个字符。

varchar(n):可变长度,最多65535个字符。

char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数。

text _:_可变长度,最多65535个字符

3:日期和时间类型。

date:3字节,日期,格式:2014-09-18

time:3字节,时间,格式:08:42:30

datetime:8字节,日期时间,格式:2014-09-18 08:42:30

3:常用属性

1.primary key :

用于确保指定行的唯一性。在指定为主键的列中,该值不能重复或为空。

[En]

Used to ensure the uniqueness of the specified row. The value cannot be repeated or empty in a column specified as the primary key.

2 .auto_increment :

唯一的整数标识符会分配给新插入的行,并且会自动添加每个新插入的行。

[En]

A unique integer identifier is assigned to the newly inserted row and each new inserted row is automatically added.

3 .default :

设置该字段的默认值,并在该字段的值为空时填充该值。

[En]

Set the default value for the field and populate it when the value of the field is empty.

4.null:

为列指定null属性时,该列可以保持为空。

5.not null:

如果将一个列定义为not null,将不允许向该列插入null值。

6.unique:

被赋予unique属性的列将确保所有值都有不同的值,只是null值可以重复。

案例:

创建数据库 db3 设置字符集 utf8CREATE DATABASE IF NOT EXISTS db3 DEFAULT CHARSET utf8;# 指定创建表的数据库use db3;# 创建student表 写字段 数据类型 约束  设置字符集utf8CREATE TABLE student( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, # 主键id 唯一并且设置自增 NAME VARCHAR(20) NOT NULL, # 姓名 birthday DATE NOT NULL, #出生年月 age int, # 年龄intro text , #简介 文本 money float null default'0', # 钱 默认为0sfz varchar(20) not null unique  # 身份证 约束 不为空且唯一
)DEFAULT CHARSET=utf8;

undefined

SQL基础语法

二:增删改查语法

1.添加表数据 :

insert into 表名(列名1,列名2…)values(列1数据,列2数据…);

案例:

2.删除表数据 :

2.1 按条件删除指定数据:

delete from 表名 where 选择条件 ;

2.2 销毁整张表:

drop table 表名;

案例:

3.修改表数据 :

update 表名 set 列名=列值,列2名=列2值…where 选择条件;

案例:

4.修改表结构:

4.1 添加列:

alter table 表名 add 列名 数据类型;

4.2 删除列:

alter table 表名 drop column 列名;

案例:

5.表查询 :

5.1 查询表所有数据:

select * from 表名;

5.2 指定查询:

select 列名1 as [列别名],列名2...  from 表名  as  [表别名]
 where 字段='值'  [查询条件]    group by  [分组条件]
having [控制打印]   order by [排序 默认升序  尾端加desc 为降序]

案例:

SQL基础语法

三 :表关联查询

1.两表查询 :

1.1 内连接:

关键字 inner join on 作用: 获取两个表的公共部分

SELECT * FROM [表名]  [别名]  INNER JOIN [表名] [别名] ON 表1.字段=表二.字段;

SQL基础语法

1.2 左连接:

关键字 left join on 作用: 获取左表全部内容 和 两个表的公共部分

SELECT * FROM [表名] [别名] LEFT JOIN [表名] [别名] ON 表1.字段= 表2.字段;

SQL基础语法

1.3 右连接:

关键字 right join on 作用: 获取右表全部内容和两个表公共部分

SELECT * FROM [表名] [别名] RIGHT JOIN [表名] [别名] ON 表1.字段 = 表2.字段 ;

案例:

SQL基础语法

1.4 :全连接:

相等于 左连接 union 右链接 ,

union 获取两个表的数据并且去重 , union all 表示获取两个表全部

SELECT * FROM [表名] [别名] LEFT JOIN  [表名] [别名] ON 表1.字段 = 表2.字段
 UNION
 SELECT * FROM  [表名] [别名] RIGHT JOIN  [表名] [别名] ON 表1.字段 = 表2.字段;

案例:

SQL基础语法

2.多表查询 :

作用: 一次性查询多个表的数据

案例: 三表查询

ps:需要添再加表只需要在后面再使用左连接关键字添加加表4就好

#三表关联查询 ,第一个表关联中间表的结果,然后关联第二个表
SELECT * FROM [表名] [别名] INNER JOIN [表名] [别名] ON 表1.字段=表2.字段
LEFT JOIN [表名] [别名] ON  表2.字段= 表3.字段

SQL基础语法

四:子查询

1.列子查询(单例,多例) :

性质:子查询 指一个查询语句 嵌套在 另一个查询语句内部的查询

SELECT * FROM [表名] WHERE [表字段] = (SELECT [字段] FROM [表名] WHERE  [表字段] = [值] );

案例:(多例就是查询条件放大)

SQL基础语法

2.表子查询 :

在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果做为外层查询的过滤条件,在子查询中通常可以使用 IN EXISTS ANY ALL操作符。

SELECT * FROM [表一] WHERE ([字段1],[字段2]...) IN (SELECT [字段1],[字段2]... FROM [表二]);

案例代码:

建表
CREATE DATABASE  IF NOT EXISTS info DEFAULT CHARSET utf8;
USE info;

建表
CREATE TABLE IF NOT EXISTS emp(
 emp_id INT PRIMARY KEY AUTO_INCREMENT,
 emp_name VARCHAR(20),
 salary INT, dept_id INT , manager_id INT
);

#插入数据
INSERT INTO emp(emp_name,salary,dept_id,manager_id)
VALUES("tom",15000,1,NULL),("lucy",14000,5,NULL),
("张建国",4000,1,1),("李华",600,1,1),("王强",6000,2,2),
("周杰",5000,2,2),("曹光思",7000,5,3),("刘毅真",8000,5,3),
("王岩",5000,5,3);

#子查询,单值
 将查询语句返回的结果做为另一个查询语句的条件
SELECT * FROM emp WHERE salary >(SELECT salary FROM emp WHERE emp_name="王强");

SELECT * FROM emp WHERE dept_id = (SELECT dept_id FROM emp WHERE emp_name = "张建国")
AND salary > (SELECT salary FROM emp WHERE emp_name = "王岩")

子查询 多值
in  条件 in (匹配括号中的值)  匹配成功打印
SELECT * FROM emp WHERE dept_id IN(SELECT  dept_id FROM emp WHERE emp_name LIKE "王%");

将返回的结果表 作为查询表使用
SELECT * FROM (SELECT * FROM emp WHERE dept_id >2 AND salary > 5000) e  WHERE emp_id > 1;

Original: https://www.cnblogs.com/zzc1102/p/15994600.html
Author: and脱发周大侠
Title: SQL基础语法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505580/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设计模式之工厂方法

    一、工厂方法:简单工厂违背了单一职责原则,而且不利于扩展,于是衍生了工厂方法模式,该模式能很好地解决对扩展开放、对修改关闭的需求。 二、实现思路 :对每一个对象都创建一个对应的工厂…

    数据库 2023年6月14日
    0116
  • SQL 版本号排序

    SQL 语句直接对内容为版本号格式的字段进行排序时,排序效果通常不是最终想要的效果,因为最终需要的效果,是需对版本号里的每一段(通常以小数点分隔)按数值进行排序。 解决这个问题,主…

    数据库 2023年6月16日
    071
  • CompletableFuture方法全解

    public class SpringbootWebApplicationTests { private final Logger logger = LoggerFactory.g…

    数据库 2023年6月6日
    079
  • LeetCode 14. 最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs = [“flower&#8…

    数据库 2023年6月11日
    064
  • 存储过程procedure、触发器trigger

    一、存储过程procedure MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对…

    数据库 2023年6月9日
    083
  • spring上传文件

    本文将说明spring上传文件如何配置,以及从request请求中解析到文件流的原理 #添加依赖 主要用来解析request请求流,获取文件字段名、上传文件名、content-ty…

    数据库 2023年6月16日
    077
  • eclipse连接MySQL 8.0.29.0

    推荐文章: eclipse导入JDBC MySQL详细安装 菜鸟java MySQL连接教程 步骤: 找到MySQL的连接Java的jar文件; 如下图: 在eclipse项目文件…

    数据库 2023年5月24日
    0109
  • java面试题总结

    1,集合类面试题 arraylist和linkedlist的区别?底层实现?手写实现?线程安全吗以及原因? hashmap的底层实现?put()执行过程?put null时的执行过…

    数据库 2023年6月11日
    088
  • Docker 启动各个应用

    MySQL docker run -p 3306:3306 –name mysql -v /usr/mydata/mysql/log:/var/log/mysql -v /usr…

    数据库 2023年6月6日
    074
  • flowable 从zip压缩包 部署流程定义

    /**部署流程定义(从zip压缩包) * @param name //部署名称 * @param zippath //zip文件路径 * @return 部署ID * @from …

    数据库 2023年6月6日
    088
  • 数据库基础,看完这篇就够了!

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月11日
    088
  • [javaweb]监听器统计网页在线人数

    监听器 1.配置监听器 package com.javaweb.controller; import javax.servlet.ServletContext; import ja…

    数据库 2023年6月16日
    094
  • MySQL临时表

    MySQL中临时表主要有两类,包括外部临时表和内部临时表。外部临时表是通过语句create temporary table…创建的临时表,临时表只在本会话有效,会话断开…

    数据库 2023年6月9日
    095
  • 绘制几何图形

    《零基础学Java》 绘制几何图形Java可以 分别使用 Graphics 和 Graphics2D 绘制图形, Graphics类 使用不同的方法绘制不同的图形(drawLine…

    数据库 2023年6月16日
    0102
  • 实现随机验证码

    Java实现随机验证码的生成 随机验证码: 法一:普通方法 核心逻辑: 1.定义一个String类型的变量存储验证码字符。 2.定义一个for循环,循环n次(n为验证码的所需要字符…

    数据库 2023年6月16日
    0117
  • Mysql生成测试数据函数

    1、查看设置是否允许创建函数系统参数 show variables like ‘log_bin_trust_function_creators’; 2、临时设置允许创建函数系统参数…

    数据库 2023年6月16日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球