首页 > 数据库 >Mysql 基础

Mysql 基础

时间:2024-03-07 10:56:47浏览次数:19  
标签:... name age 基础 Mysql WHERE SELECT zzz

创建数据库

CREATE DATABASE NAME;

创建表

# 中括号[]是可选的意思,命令中不带中括号
CREATE TABLE table_name (
    column1 datatype [NULL or NOT NULL] [DEFAULT 默认值] [AUTO_INCREMENT PRIMARY KEY],
    column2 datatype,
    ...
    // 上边没有PRIMARY KEY可以在最下边指定
    [PRIMARY KEY(column1, colums2, ...)]
) [ENGINE=InnoDB];

插入数据

插入完整行

INSERT INTO zzz VALUES (v1, v2, ...);

这个语法依赖值的定义次序,不安全。

INSERT INTO zzz (name, age, sex, ...) VALUES (v1, v2, ...);

这种语法指定列名,不需要全部列指定。

插入多个行

INSERT INTO zzz (name, age, sex, ...) VALUES (v1, v2, ...), VALUES(v1,v2,...), ...;

插入检索出的数据

INSERT INTO zzz (name, sex, ...) SELECT xxx, yyy, ... FROM ttt;

将从 ttt 检索的数据插入 zzz,查询的表项要和插入的表项一一对应。

查询

DISTINCT

查询出的行一定都是唯一的,DISTINCT 会应用于所有列,而不仅仅是前置它的列。

SELECT DISTINCT xxx,yyy FROM zzz;

LIMIT

限制返回行数,默认从 0 行数,否则第一个为起点,第二个为行数。

SELECT * FROM zzz LIMIT 5,5;

ORDER BY

对一行或多行排序,也可以用非选择列排序,默认升序,DESC指定为降序。同时使用 ORDER BY 和 WHERE 子句的时候 ORDER BY 要放后边

# 按 xxx 降序排列,如果 xxx 相同,则按 yyy 升序排列
SELECT xxx,yyy FROM zzz ORDER BY xxx DESC, yyy;

WHERE

对某些列按条件过滤数据。条件:

  1. = 等于

  2. <> 或 != 不等于

  3. <= < > >= 小于等于、小于、大于、大于等于

  4. BETWEEN 指定两个值之间

  5. IS NULL 空值检查

  6. IN 判断元素是否在一个集合里

    SELECT age FROM zzz WHERE age IN (2,4,6,8);
    
  7. AND OR NOT 两个条件的且、或、非运算

    SELECT age FROM zzz WHERE (age BETWEEN 5 AND 10) OR (age > 18) and (NOT sex='f');
    

LIKE

LIKE如果不使用通配符,就就相当于等值判断,LIKE通配符:

  1. % 匹配任意字符任意次数,但不能匹配 NULL。

    SELECT name FROM zzz WHERE name LIKE 'Tom%'
    
  2. _ 下划线匹配任意单个字符,两个就是匹配任意两个字符。

    SELECT name FROM zzz WHERE name LIKE '__Tom%'
    

REGEXP

加强版 LIKE。

创建计算字段(列)

想要查询一个原表不存在的列,但可以由源表某些列计算得到。

拼接 CONCAT

# RTrim去除右边的空格
SELECT CONCAT (id , 分隔符, RTrim(name)), id, name from zzz 

算数计算

SELECT age+age as new col, id, name from zzz 

别名 AS

设置列的别名

# RTrim去除右边的空格
SELECT CONCAT (id , 分隔符, RTrim(name)) AS newcol, id, name from zzz 

数据处理函数

  1. Upper/Lower() 大/小写字符串
  2. Length() 串的长处
  3. Locate() 子串
  4. L/RTrim() 去掉左/右边的空格
  5. Abs()、cos()、exp()、mod()、pi()、rand(), sin(), sqrt(), tan()

聚集函数

运行在行组上,返回单个值

  1. AVG() 返回某列平均值
  2. COUNT() 返回某列行数
  3. MAX() MIN() 返回某列最值
  4. SUM() 返回某列和
# DISTINCT 指明只计算不同值的 sum
SELECT SUM(DISTINCT age) as newcol, MAX(age) as xxx from zzz;

GROUP BY 分组

聚集函数只会返回一行,分组会分为n个逻辑组,每个逻辑组计算聚集函数,返回n 行。

# 根据男女分组
SELECT SUM(DISTINCT age) as newcol, MAX(age) as xxx from zzz GROUP BY sex;

HAVING 对分组内的数据过滤

HAVING 支持所有 WHERE的子句,他的作用是对每个分组内的数据过滤。

HAVING和WHERE的差别: 这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。

SELECT 子句顺序

SELECT FROM [WHERE] [GROUP BY] [HAVING] [ORDER BY] [LIMIT]

子查询(嵌套查询)

一个查询的结果作为另一个查询语句中的一部分

作为条件

SELECT name FROM zzz WHERE age in (
		SELECT age FROM yyy WHERE sex='f'
)

作为计算字段

SELECT name, ( SELECT COUNT(*) FROM yyy WHERE yyy.name=zzz.name)
FROM zzz;

连结表(join)

两个表做笛卡尔积然后做等值过滤

内部联结

SELECT s_name, t_name FROM students INNER JOIN teachers ON students.class = teachers.class
SELECT s_name, t_name FROM students, teachers WHERE students.class = teachers.class

自联结

使用表别名即可

SELECT  * from zzz as a inner join zzz as b on a.name=b.date

自然联结

应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结(前一章中介绍的内部联结)返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。需要自己手动操作,显示需要的列。

外部联结

弱化的等值联结,也就是左外联结会包含内部联结的所有行以及左边表中右边没有匹配到的行各有一行且右边的表项全为 NULL。

对于左边的每一行:遍历右边每一行,如果联结值相等,则两行拼接。如果遍历完没有任何一行匹配,则右边拼接 NULL。

组合查询 UNION

将多次查询结果合并。不同的查询必须包含相同的列,表达式或聚集函数。列数据类型必须兼容。

SELECT age FROM zzz UNION SELECT id*id FROM zzz

更新数据 UPDATE

UPDATE zzz SET name='xxx' WHERE id = 3;

删除数据 DELETE

DELETE FROM zzz WHERE id=3;

标签:...,name,age,基础,Mysql,WHERE,SELECT,zzz
From: https://www.cnblogs.com/hellozhangjz/p/18058378

相关文章

  • java mysql事物特性记录,在同一事物中更新执行后,立即查询得到的是新数据还是旧数据?
    在Java中,如果你使用MySQL,并且你在一个事务方法中执行了更新操作,那么在这个事务结束并提交之前,其他事务或查询(非同一事务内的)是看不到你的更新结果的。这是数据库事务的隔离性所保证的。 但是,如果你在同一事务中立即执行查询,你将看到更新后的数据。因为查询和更新都在同一个事务......
  • 用几张图实战讲解MySQL主从复制
    本文分享自华为云社区《结合实战,我为MySQL主从复制总结了几张图!》,作者:冰河。MySQL官方文档MySQL主从复制官方文档链接地址如下所示:http://dev.mysql.com/doc/refman/8.0/en/replication.htmlMySQL主从复制方式MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(......
  • MySQL binlog/redolog/undolog 的区别?
    想和大家聊聊InnoDB中的锁机制,那么不可避免的要涉及到MySQL的日志系统,binlog、redolog、undolog等,看到有小伙伴总结的这三个日志还不错,赶紧拿来和各位小伙伴分享。日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、......
  • C语言基础-1、循环控制
    一、素数ex1:#include<stdio.h>intmain(){ intn; intflag=0;//标识符,0表示该数字是素数 scanf("%d",&n); inti=2; for(i;i<n;i++) { if(n%i==0) { flag=1; } } if(flag==0) { printf("%d是素数!\n",n); } else......
  • 卡码java基础课 | 9.打印正方形
    学习内容:通过一道题目来学习使用循环嵌套。例题:解:点击查看代码importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();for(intro......
  • 卡码java基础课 | 8.奇怪的信
    学习内容:通过一道题加深对取模和除法的理解例题:解:点击查看代码importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);while(sc.hasNext()){intnum......
  • 从零开始搭建Springboot开发环境(Java8+Git+Maven+MySQL+Idea)之一步到位
    说明所谓万事开头难,对于初学Java和Springboot框架的小伙伴往往会花不少时间在开发环境搭建上面。究其原因其实还是不熟悉,作为在IT界摸爬滚打数年的老司机,对于各种开发环境搭建已经了然于胸,自己当年也是这么过来的。今天我就毕其功于一役,解放大家的时间,让凡人的环境配置见鬼去吧......
  • 卡码java基础课 | 7.摆平积木
    学习内容:用一道题目来练习ArrayList的遍历和访问操作。例题:解:点击查看代码importjava.util.ArrayList;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);in......
  • 零基础python编程基础
    1.计算机:脑力劳动工具                                       2. ......
  • Day03---Web前端基础
    JavaScript的使用Javascript的定义JavaScript是运行在浏览器端的脚步语言,是由浏览器解释执行的,简称js,它能够让网页和用户有交互功能,增加良好的用户体验效果。前端开发三大块1、HTML:负责网页结构2、CSS:负责网页样式3、JavaScript:负责网页行为,比如:网页与用户的交互......