欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库的单表查询,熟悉SQL语句

程序员文章站 2022-03-09 11:07:30
...

回顾MYSQL

回顾JDBC

今日学习目标:

使用SQL语句完成单表的增删改查

使用JDBC通过java代码完成单表的增删改查

创建数据库:create 数据库名;

删除数据库:drop database 数据库名;

查看数据库:show databases;

创建数据库并进行设置编码格式:create database 数据库名 character set gbk;

显示数据库结构:show create database 数据库名;

使用库:use 数据库名;

查看当前正在操作的库:select database();

二:对数据库表的操作

创建表语句:

 create table user(
    uid int(32) primary key auto_increment,
    uname varchar(32),
    upassword varchar(32)
    );

查询表:show tables;

查看表结构:desc 表名;

删除表:drop table 表名;

修改表:

1.添加一列:alter table 表名 add 字段名 类型(长度) [约束]

数据库的单表查询,熟悉SQL语句

数据库的单表查询,熟悉SQL语句

2.修改列的类型(长度、约束)

alter table 表名 modify 要修改的字段名 类型(长度) [约束]

数据库的单表查询,熟悉SQL语句

数据库的单表查询,熟悉SQL语句

数据库的单表查询,熟悉SQL语句

3.修改列的名字:

alter table 表名 change 旧列名 新列名类型(长度)、[约束]

数据库的单表查询,熟悉SQL语句

4.删除表的列

alter table 表名 drop 列名

.数据库的单表查询,熟悉SQL语句

5.修改表名:

rename table 表名 to 新表名; 

数据库的单表查询,熟悉SQL语句

6.修改表的字符集:

alter table 表名 character set 编码:

数据库的单表查询,熟悉SQL语句

查看当前表的编码:show create table user_tb;

数据库的单表查询,熟悉SQL语句

三、对数据库中表记录的操作_插入和修改操作:

插入语法:

insert into 表名(列1,列2,列3...) values (值1,值2,值3...)--向表中插入某些列

insert into 表名 values(值1,值2,值3...)--向表中插入所有列

注意:1.参数和值前后长度保持一致 2.值如果是字符串和时间,则加上单引号。

数据库的单表查询,熟悉SQL语句

 注意:出现乱码时,在MySQL配置文件my.ini中修改下列属性

方式一:

[mysql]
57 行:default-character-set=gbk

方式二:set names gbk;

数据库的单表查询,熟悉SQL语句

更新语法:

update 表名 set 字段名=值,字段名=值 ...;(它会将该列的所有值改变)

数据库的单表查询,熟悉SQL语句

update 表名 set 字段名=值,字段名=值 ... where 条件;(只会修改条件满足的那一列)

数据库的单表查询,熟悉SQL语句

删除语法:

delete from 表名 [where  条件];

面试题:删除表中所有记录使用delete from 表名;还是用truncate table 表名;

删除方式:

delete 一条一条删除,不清空auto_increment记录数(自动递增:主键)

数据库的单表查询,熟悉SQL语句

注意:删除后不会重置id。

不带条件删除(全部删除):

数据库的单表查询,熟悉SQL语句

数据库的单表查询,熟悉SQL语句

truncate 直接将表删除,重新建一样的表,auto_increment 将置为零,从新开始:

数据库的单表查询,熟悉SQL语句

事务方面:

delete 删除的数据,如果在一个事务中可以找回。

truncate 删除的数据找不回来。

 

查询语法:

select [distinct] *  |  列名1,列名2 ... from 表 [where 条件];

1.查询所有商品使用表别名:

语法:select * from product as p;(as可以省略)

数据库的单表查询,熟悉SQL语句

2.查询商品名,使用列别名:

语法:select pname as name from product;(as可以省略)

数据库的单表查询,熟悉SQL语句

3.去掉重复值(按照名字)

select distinct(pname )from product;

数据库的单表查询,熟悉SQL语句

4.将所有商品价格+10进行显示

select pname,price+10 from product;

数据库的单表查询,熟悉SQL语句

5.查询名字中含有‘士’字的商品信息:(模糊查询:like语句中,%代表零个或多个任意字符,_代表一个字符)

数据库的单表查询,熟悉SQL语句

6.查询id是3,6,9的商品:

数据库的单表查询,熟悉SQL语句

7.查询名字含有士字并且price小于100:(and:多个条件并列查询)

数据库的单表查询,熟悉SQL语句

8.or的使用:(或查询)

数据库的单表查询,熟悉SQL语句

9.聚合函数:

9.1:获取所有商品价格总和:

数据库的单表查询,熟悉SQL语句

9.2:获取所有商品的平均价格:

数据库的单表查询,熟悉SQL语句

9.3:获取所有商品个数:

数据库的单表查询,熟悉SQL语句

10.排序:

10.1:查询所有的商品,按价格进行排序:(升序:asc   降序:desc)

数据库的单表查询,熟悉SQL语句

10.2:查询商品名称有“士”的商品信息,并且按照价格降序排列:(order by 要放在where条件之后)

数据库的单表查询,熟悉SQL语句

11:分组

11.1:添加分类id:用来进行分组使用;

数据库的单表查询,熟悉SQL语句

11.2:分组:先将所有数据初始化为1:

数据库的单表查询,熟悉SQL语句

再将需要分组区分的重新按条件查询并设置为2:

数据库的单表查询,熟悉SQL语句

然后根据需求查询需要的组:

数据库的单表查询,熟悉SQL语句

11.3:分组查询商品个数:(可用来查询当前系统教师,学生,超级管理员的个数)

数据库的单表查询,熟悉SQL语句

13.4:根据cid分组,分组统计每组商品的平均价格,并且平均大于20000元;

数据库的单表查询,熟悉SQL语句

查询(顺序)总结:

select  *| 字段...  ()一般在的后面的内容都是要查询的内容

from   表

where  查询条件

group by 分组字段(注:分组后带有条件,只能使用having)

      having分组条件

order by 排序字段  asc|desc(升|降) (注:该字段必须放在最后)

 

JDBC:Java DataBase Connectivity:java数据库连接,SUN公司推出的java访问数据库的标准规范(接口)。

JDBC开发步骤:

1.注册驱动  2.获得连接  3.获得语句执行者  4.执行SQL语句  5.处理结果

  数据库驱动:class.forName("com.mysql.jdbc.Driver");
  数据库连接:Connection con = DriverManager.getConnetion("jdbc:mysql://localhost:3306/mydb1","root","1107");
  扩展参数:jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8
  useUnicode参数:指定这个连接数据库的过程中,使用的字节集是Unicode字节集;
  characterEncoding参数:指定Java程序连接数据库的过程中,使用的字节集编码为UTF-8编码,注意:mysql指定UTF-8编码是
  给出的是UTF-8,而不是UTF8;

3.获得执行语句

String sql = “insert into user(id,password) values (null,'123')”;

Statement 语句执行者 :Statement stmt = con.createStatement();

防止使用‘or’关键字,攻击服务器:

       

        // 4.创建预处理对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        // 5.设置参数(给占位符)
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        // 6.执行查询操作
        ResultSet rs = pstmt.executeQuery();

int executeUpdate(String sql); -- 执行 inert update delete 语句   (DML语句)

ResultSet executeQuery(String sql); --执行select语句  (DQL语句)

boolean execute(String sql);--执行select返回true 执行其他的语句返回false,

ResultSet实际上是一张二维的表格,它内部有一个“行光标”,光标默认位置在"第一行的上方",这里可以调用rs的对象的next()方法把“行光标”向下移动一行,当第一次调用next()方法时,“行光标”就到了第一行记录的位置,这是就可以使用ResultSet提供的getXXX(int col)方法来获取指定的列的数据了。

rs.next();   rs.getInt(1);//此时getXXX,XXX根据数据类型改变。

释放资源:关闭顺序(先得到的后关闭,后得到的先关闭)

rs.close();    stmt.close();  con.close();

核心代码:

package cn.itheima.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class TestLogin {
	@Test
	public void testLogin() {
		try {
			String username = "老王";
			String password = "456";
			login(username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void login(String username, String password) throws ClassNotFoundException, SQLException {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8", "root", "1107");
		// 3.创建执行sql语句的对象:注意:除了Driver是jdbc下面的包,其他都是sql中的包
		Statement stmt = conn.createStatement();
		// 4.书写一个sql语句
		String sql = "select uname,upwd from user where " + "uname ='" + username + "' and upwd='" + password + "'";
		// 5.执行sql语句
		ResultSet rs = stmt.executeQuery(sql);
		// 6.对结果集进行处理
		if (rs.next()) {
			System.out.println("登录成功!");
			System.out.println("用户名:" + username + "密码:" + password);
			System.out.println(sql);
		} else {
			System.out.println("查无此人!");
		}
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (conn != null) {
			conn.close();
		}

	}

public void login1(String username, String password) throws ClassNotFoundException, SQLException {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获取连接
		Connection conn = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8", "root", "1107");
		// 3.先编写sql语句
		String sql = "select * from user where uname = ? and upwd=?";
		// 4.创建预处理对象
		PreparedStatement pstmt = conn.prepareStatement(sql);
		// 5.设置参数(给占位符)
		pstmt.setString(1, username);
		pstmt.setString(2, password);
		// 6.执行查询操作
		ResultSet rs = pstmt.executeQuery();
		// 7.对结果集进行处理
		if (rs.next()) {
			System.out.println("登录成功!");
			System.out.println("用户名:" + username + "密码:" + password);
			System.out.println(sql);
		} else {
			System.out.println("查无此人!");
		}
		if (rs != null) {
			rs.close();
		}
		if (pstmt != null) {
			pstmt.close();
		}
		if (conn != null) {
			conn.close();
		}

	}
}

 

分页查询关键字limit(2,2)第一个参数为起始位置,第二个参数表示每页显示的数据数量。

起始位置计算:(要查询第几页-1)*第二个参数 = 起始位置。

每页显示三条记录,查询第三页数据:如下:

数据库的单表查询,熟悉SQL语句

 

相关标签: 数据库