SQL学习-基础语法(DDL.DML.DQL速理解)

零.基本知识

1.什么是SQL

  • SQL:操作数据库的一门语言

2.SQL的一些特点:

书写

  • 可以多行书写,以分号(; )结尾
  • 不区分大小写,虽然语法大小写都可以,但是建议用大写

注释:

  • 单行注释:
    1. _ :_+空格+注释类容 【这里一定要加空格,不然要报错】
    2. #: # +注释类容
  • 多行注释:/* …*/

3.SQL的分类【以下详解】

  • DDL:用来定义数据库对象,操控数据库和表
  • DML:用来增删改表中的数据
  • DQL:用该查询表中的数据
  • DCL:用来访问授权

4. 数据库的数据类型

  • int:整数类型
    例如:age int;

  • double:小数类型
    例如:score double(5,2) #最大长度为5,保留小数点后两位

  • data:日期,只有年月日。yyyy-MM-dd

  • datatime:日期,年月日时分秒。yyyy–MM-dd HH:mm:ss

  • timestamp:时间戳类型,yyyy–MM-dd HH:mm:ss

    • 这个注意:如果不给这个字段赋值,或者赋值为null,默认使用当前系统时间给他赋值
  • varchar:字符串
    例如:name varchar(20) #最大为20字符

一.DDL:操控数据库和表

1.数据库操作

创建

  • 创建数据库:
    create database 数据库名称;

  • 创建数据库,判断不存在,再创建
    create database if not exists 数据库名称

  • 创建数据库,并且制定字符集(默认utf8)
    create database 数据库名称 character set 字符集名

  • 宗和练习,创建mydata2数据库,并且判断是否存在,然后制定字符集为gbk

    create database if not exits bd4 character set gbk

查询

  • 查询所有数据库名称
    show database
  • 查询某个数据库的字符集,查询某个数据库的创建语句
    show create database 数据库名称

修改

  • 修改数据库的字符集
    alter database 数据库名称 character set 字符集名

删除

  • 删除数据库
    drop database 数据库名称【危险:删库跑路】
  • 先判断有没有,再删除
    drop database if exists 数据库名称

使用数据库

  • 查询当前正在使用的数据库
    select database();
  • 使用数据库
    use 数据库名称

2.表操作

创建

  • 语法:
    create table 表名称(
    列名1 数据类型1,
    列名2 数据类型2,

    列名n 数据类型n
    );
    注意最后一行不要逗号(,)

  • 练习:创建学生信息表
    在这里插入图片描述

复制

  • 例如:create table stu like students;
  • 含义把students的内容复制给stu

查询

  • 查询某个数据库中所有表名称
    show tables
  • 查询表结构
    desc 表名称

修改

  • 修改表名
    alter table 表名 rename to 新表名
  • 修改表的字符集
    alter table 表名 character set 字符集名称
  • 添加一列
    alter table 表名 add 列名 数据类型
  • 修改列名称,类型
    alter table 表名 change 列名 新列名 新数据类型【改名称和类型】
    alter table 表名 modify 列名 新数据类型【只改类型】
  • 删除列
    alter table 表名 drop 列名

删除

  • 直接删除
    drop table 表名
  • 最好先判断再删除
    drop table if exists 表名;

二.DML:操作表数据

1.添加数据

  • 语法:
    insert into 表名(列名1,列名2…) values(值1,值2…)
  • 注意:
    • 1.在添加字符串和日期类型的时候【除了数字类型其他的都要】,要用引号括起来(单双都可以)
    • 2.如果表名后不定义列名,则默认给所有列添加值
      insert into 表名 values(值1,值2…) 【必须都添加,不知道的就写null】
  • 练习:添加2个学生进去

  • ** 特别注意:这里可能会出现中文字符无法写入报错的问题,原因是mysql的默认字符集没有设置为utf8
  • 处理方法文章
    https://blog.csdn.net/u012004128/article/details/79911869

2.删除数据

  • 语法:
    delete from 表名 where 条件; 【表示把满足where条件的列删除】
  • 例如:
    delete table students where age=18;【把满足age=18的列删除】
  • 注意:
    倘若不写where的类容,那么会直接把表中的所有数据删除【但是这样会执行很多次delete语句,不高效】
    使用:truncate table 表名;【删除表,然后创建一个一模一样的空表】

3.修改数据

  • 语法:
    update 表名 set 列名1=值1,列名2=值2,… where 条件;【把瞒住where条件的列,用前面的替代方式替代】
  • 注意:
    如果不添加where条件,就认为修改表中全部数据
  • 例如:
    update students set age=90 where name=‘张三’;

三.DQL:访问表数据

1.基础查询

  • 1.多个字段查询
    select 字段名1,字段名2,字段名3… from 表名;
    注意:
    如果查询所有字段,则可以使用
    来代替字段列表
  • 2.去除重复
    distinct
  • 3.计算列
    • 一般可以使用四则运算计算一些列的值(一般只会进行数值型计算)
    • ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
      • 表达式1:判断这个是否为null
      • 表达式2:如果1是null,则被替换为2
  • 4.起别名:
    as:也可以省略

2.条件查询

  • 1.where字句后跟的条件

  • 2.运算符
    >、<、<=…<>【不等于,和!=相同】
    between…and…【在这个闭区间内】
    in(元素1,元素2…)【在in里面的集合内查找】
    like

    • 模糊查询,占位符
      _:单个任意字符
      %:多个任意字符

    is null
    and 、 &&
    or 、 ||
    not 、 !

3.排序查询

  • 语法:order by 字句
order by 排序字段1 排序方式1,排序字段2 排序方式2.....
  • 排序方式:
    asc:升序,默认的
    desc:降序
  • 注意:
    如果有多个排序条件,则当前边的条件一样时,才会判断第二条件

4.聚合函数

  • 1.count:计算个数
    • 一般选择非空的列:主键
    • count(*):计算有多少列【只要有一项不为null就算】
    • 例如:select count(*) from Student
  • 2.max:计算最大值
  • 3.min:计算最小值
  • 4.sum:计算和
  • 5.avg:计算平均值
  • 注意:
    集合函数的计算,排除了null值
    解决方案
    • 选择不包含非空的列计算
    • IFNULL函数
      例如:
      select count(ifnull(score,0)) from studens;【表示冲students表中获取所有分数的和】

5.分组查询

  • 语法:
    group by 分组字段;

  • 注意:
    1.分组之后查询的字段:分组字段、聚合函数【不要其他的】

    2.where和having的区别?

    • where在分组之前进行限定,如果不满住条件,则不参与分组。having在分组之后进行限定,如果不满住,则不被1查询出来

    • where后不可以跟聚合函数,having可以进行聚合函数的判断

6.分页查询

  • 语法:
    limit 开始的索引位置,每页可查询的条数

  • 公式:
    开始的索引=(当前的页码-1)*每页可显示数

  • 注意:
    分页是一个”方言“【只有mysql能用limit语句,其他数据库有其他语句】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用数据库连接池来连接数据库进行操作,然后通过拼接SQL语句的方式实现SQL生成器。下面是一个简单的示例: 1. 定义一个数据库连接池的类,用于获取数据库连接: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DBUtil { private static DataSource ds = new ComboPooledDataSource(); public static Connection getConnection() throws SQLException { return ds.getConnection(); } } ``` 2. 定义一个SQL生成器类,用于生成DDLDMLDQL语句: ```java import java.util.ArrayList; import java.util.List; public class SQLBuilder { private String tableName; private List<String> columns = new ArrayList<>(); private List<String> values = new ArrayList<>(); private List<String> conditions = new ArrayList<>(); public SQLBuilder(String tableName) { this.tableName = tableName; } public SQLBuilder addColumn(String column) { columns.add(column); return this; } public SQLBuilder addValue(String value) { values.add(value); return this; } public SQLBuilder addCondition(String condition) { conditions.add(condition); return this; } public String createDDL() { StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE ").append(tableName).append("("); for (String column : columns) { sb.append(column).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(")"); return sb.toString(); } public String createDML() { StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO ").append(tableName).append(" ("); for (String column : columns) { sb.append(column).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(") VALUES ("); for (String value : values) { sb.append(value).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(")"); return sb.toString(); } public String createDQL() { StringBuilder sb = new StringBuilder(); sb.append("SELECT * FROM ").append(tableName); if (!conditions.isEmpty()) { sb.append(" WHERE "); for (String condition : conditions) { sb.append(condition).append(" AND "); } sb.delete(sb.length() - 5, sb.length()); } return sb.toString(); } } ``` 3. 使用SQL生成器生成SQL语句: ```java public class Main { public static void main(String[] args) { SQLBuilder builder = new SQLBuilder("user"); String ddl = builder.addColumn("id INT PRIMARY KEY AUTO_INCREMENT") .addColumn("name VARCHAR(50)") .addColumn("age INT") .createDDL(); System.out.println(ddl); String dml = builder.addValue("1") .addValue("'Tom'") .addValue("20") .createDML(); System.out.println(dml); String dql = builder.addCondition("age > 18") .createDQL(); System.out.println(dql); } } ``` 上述代码生成的SQL语句分别为: ```sql CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT) INSERT INTO user (id,name,age) VALUES (1,'Tom',20) SELECT * FROM user WHERE age > 18 ``` 当然,这只是一个简单的示例,实际应用中可能需要更复杂的SQL操作和更灵活的生成方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值