Java SQL基础

Wesley13
• 阅读 670

SQL基础

1、DataBase

  • 创建:CREATE DATABASE DATABASE_NAME ;
  • 使用:USE DATABASE_NAME ;
  • 删除:DROP DATABASE DATABASE_NAME ;

2、Table

创建

CREATE TABLE TABLE_NAME (
    COLUMNS TYPES
    ......
) [CHARACTER SET UTF8] ;

删除

1) TRUNCATE 。清空表内容,保留表结构。效率非常高,且不记录日志。

TRUNCATE TABLE TABLE_NAME ;

2) DELETE 。删除表内容,按条件删除。若无删除条件,则将表内容全部删除。不影响表结构。很少使用。

-- 按条件删除指定内容,使用十分至少,一般由改状态字段来实现伪删除(set isDelete=true)
DELETE FROM TABLE_NAME WHERE CONDITION ;
-- 清空表,与TRUNCATE作用相同,但将记录日志,且效率低
DELETE FROM TABLE_NAME ;

3) DROP 。删除表内容及表结构。

DROP TABLE TABLE_NAME;

表结构

查看

DESC TABLE_NAME ;

修改

-- 增加字段
ALTER TABLE TABLE_NAME ADD COLUMNS TYPES, ... ;
-- 修改字段
ALTER TABLE TABLE_NAME MODIFY COULMNS TYPES, ... ;
-- 删除字段
ALTER TABLE TABLE_NAME DROP COLUMNS;

增加

INSERT INTO TABLE_NAME (COLUMNS TYPES , ...) VALUES (VALS , ...) ;

删除

DELETE FROM TABLE_NAME WHERE CONDITION ;

修改

UPDATE TABLE_NAME SET COLUMN_NAME=VAL WHERE CONDITION ;

3、查询SELECT

基本查询语句

-- 查询表所有字段内容
SELECT * FROM TABLE_NAME ;

-- 按条件查询所有字段内容
SELECT * FROM TABLE_NAME WHERE CONDITION ;

-- 按条件查询指定字段内容
SELECT COLUMNS, ... FROM TABLE_NAME WHERE CONDITION ;

条件查询

-- IN 查询, 判断字段值是否在指定内容之中
SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN (VAL1, VAL2, ...) ;

-- EXISTS 查询,与 IN 效果类似,EXISTS之内为一个SELECT子查询,并将外部字段作为参数传入内部查询
-- EXISTS函数中参数只要有结果,则返回TRUE
SELECT * FROM TABLE_NAME WHERE EXISTS (SELECT * FROM SUB_TABLE WHERE TABLE_COLUMN=SUB_TAB_COLUMN) ;

模糊查询

-- LIKE + 通配表达式 实现模糊查询
SELECT * FROM TABLE WHERE A LIKE "N%" ;

SQL常用通配符:

单个占位符: _

匹配0到N个字符: %

匹配所有: *

子查询:将查询结果作为一个表或字段值成为SELECT、IN等的操作对象

-- SELECT 子查询,注意标要取别名
SELECT * FROM (SELECT A, B, C FROM TABLE1)D ;

-- WHERE 子查询
SELECT * FROM TABLE1 WHERE A=(SELECT MAX(B) FROM TABLE2) ;

-- IN 子查询
SELECT * FROM TABLE1 WHERE A IN (SELECT B FROM TABLE2) ;

联合查询

-- UNION ALL 查询,将多个查询结果进行拼接,使之在同一个表中展示
-- 唯一条件:各查询字段数必须一致,否则将报错
SELECT A, B, C FROM TABLE1 UNION ALL SELECT D, E, F FROM TABLE2 ;

-- 当某个字段数不足时,通过拼接 '' 空字段等使之字段数相同
SELECT A, B, C FROM TABLE1 UNION ALL SELECT D, E, '' FROM TABLE2 ;

分组查询

-- 分组查询: 即将查询结果按字段进行分组
-- WHERE 条件需放在分组查询前
SELECT * FROM TABLE1 WHERE CONDITIONS GROUP BY A, B ;

-- 对分组查询结果进行筛选时,WHERE条件将不再起作用,WHERE为查询时过滤,HAVING为查询后过滤,此时用到HAVING 关键字
SELECT * FROM TABLE1 WHERE CONDITIONS GROUP BY A, B HAVING CONDITIONS;

常用分组聚合函数

MAX()   MIN()  AVG()  SUM()  COUNT()

COUNT函数将参数所有非空值进行统计,返回统计值

当不分组时,函数的默认参数为所有对象的值

排序

SELECT * FROM TABLE1 WHERE CONDITION GROUP BY A HAVING CONDITION ORDER BY B ;

默认为升序排序 ASC

降序排序

SELECT * FROM TABLE1 WHERE CONDITION GROUP BY A HAVING CONDITION ORDER BY B DESC ;

分页查询

SELECT * FROM TABLE ORDER BY A LIMIT M, N ;

LIMIT后跟一个或者两个参数。当参数为一个时,代表限制前N条数据被查询。当参数为两个时,第一个参数为偏移量,第二个参数为被查询的条目数,即展示内容为第 m+1至第 m+n 条。

通过分页查询与排序的结合,可以轻易取得排在第n位的数据: ORDER BY A LIMIT N-1, 1 ;

连接查询

内连接

取所被连接表的交集

SELECT * FROM TABLE_A INNER JOIN TABLE_B ON A_ID=B_ID ;

被连接的两表:TABLE_A 、TABLE_B

连接条件:A_ID = B_ID

左连接

取所连接表的左表值

SELECT * FROM TABLE_A LEFT JOIN TABLE_B ON A_ID=B_ID ;

假如A表共有18行,但可以与B表进行关联内容(A_ID=B_ID)只有15行,如果是INNER JOIN内连接,所得连接结果为15行,但左连接取值为左表的所有值,所以连接结果仍为18行,且右表所没有的3行将展示为空(NULL)

右连接

与左连接相类似,取值为右表所有值

多表关联

SELECT * FROM TABLE_A  A INNER JOIN TABLE_B B ON A.ID=B.ID INNER JOIN TABLE_C C ON C.C_ID=B.C_ID;

-- 连接的WHERE实现
SELECT * FROM TABLE_A A, TABLE_B B, TABLE_C C WHERE A.ID=B.ID AND B.C_ID=C.C_ID;
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
List的Select 和Select().tolist()
List<PersondelpnewList<Person{newPerson{Id1,Name"小明1",Age11,Sign0},newPerson{Id2,Name"小明2",Age12,
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na