范式的概念:3范式:
范式的目的:解决重复的数据问题(冗余:多余重复)
第一范式:确保表中的字段不能拆分!(字段的原子性:一个表只描述一个事情)
第二范式:确保表中的各个字段都依赖于主键(将字段删除)
第三范式:消除传递依赖,确保各个字段都绝对依赖主键
外键的注意事项:
1:只有主键才可以作为另一个表的外键
2:外键的数据类型必须和主键的数据类型兼容
多个表的查询:
1:表连接查询
交叉连接:返回笛卡尔集
内连接:
外连接:
左外连接: 返回基于left关键字(左侧的表)做为基表所有的记录,没有则使用null填充
右外连接:返回基于right关键字(右侧的表)做为基表所有的记录,没有则使用null填充
表连接查询会返回多个表的字段信息,有些条件查询表连接不能查询(例如:查询没有参加过考试的学生信息)。
2:子查询: 查询中的查询(嵌套查询)
子查询:语法
Select * from 表 where 字段名 in (=)(select 字段名 from 表名)
注意以上的红色的字段名(要求数据类型必须兼容)
例如:查询年龄最大的学生信息:
select * from stu where age =(select max(age) from stu);
| 区别 | 表连接 | 子查询 |
| 返回的结果集 | 多个表的字段 | 父查询表的字段 |
| 执行效率 | 低 | 高 |
# =any(=some) 等效于 in <>all等效于 not in
select * from stu where sid in(select sid from score);
select * from stu where sid =any(select sid from score);
#查询没有参加过考试的学生
select * from stu where sid not in(select sid from score);
select * from stu where sid <>all(select sid from score);
子查询最大可以嵌套32个 . 子查询执行时会将各个子查询交给一个CPU去执行
正则表达式为什么使用正则:
问题:如何在一个文件中找到所需要的内容,过滤掉一些敏感的、不文明的字。Java 提供JDK不能实现以上功能,正则可以完成!
什么是正则(表达式):正则可以对指定的文本进行验证、查询和替换。
正则的语法:
关于常用类
拆箱装箱
装箱和拆箱的目的: 简化代码,将数据类型转换的工作交给JVM
Integer i1=100; Integer i2 = new Integer(100); Integer i3= new Integer(100); System.out.println(i2); System.out.println(i3); System.out.println(i2 == i3); System.out.println(i2.equals(i3)); int a = i1;//转换:拆箱(将引用类型赋值给基本类型) int b =i2; //拆箱
Java常用类
API: Application Program Interface
应用程序 编程 接口(类似于:新华字典)
API编程:框架(的核心)
Pattern p= Pattern.compile("\d");//预编译好,保存起来 PreparedStatement: Statement
Matcher matcher = p.matcher("23");
System.out.println(matcher.matches());
//以下的代码等效于上面的3行代码, 不同的地方
// 区别在:以上的三行代码采用的是预编译效果,执行的效率要高于下面的一行代码。
System.out.println(Pattern.compile("\d").matcher("11").matches());
时间的操作:
Java.util.Date
package com.song.example;
import java.text.*;
import java.util.Calendar;
import java.util.Date;
public class DateTemo {
public static void main(String[] args) throws ParseException {
//关于Date(时间) 的操作:
Date date =new Date();//默认构造:系统时间作为参数
System.out.println(date);
Date date1 =new Date("1999/9/9");
System.out.println(date1);
// Date date2 = new Date(2001, 11, 23);
// Date date3 = new Date(Calendar.YEAR, Calendar.MONTH, Calendar.DATE);
// System.out.println(date2);
//日期的格式化
DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// DateFormat dateFormat =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// DateFormat dateFormat =new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
System.out.println(dateFormat.format(date));
//String的转换日期
String str="1998-11-22";
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date parse = sdf.parse(str);
System.out.println(parse);
//日期转换为String
System.out.println(sdf.format(parse));
System.out.println(sdf.format(new Date()));
}
}
日历操作类:java.util.Calendar
该类可以对日历进行操作:对指定的日期获取、年、月、日等,判断是否闰年、在日期上进行增加、减少等。
package com.song.example;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class CalendarDemo {
private static final SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
public static void main(String[] args) {
//日历操作: 判断闰年
//通过静态方法创建一个日历的实例(系统时间)
Calendar calendar= Calendar.getInstance();
System.out.println("得到long的毫秒值:1900:"+calendar.getTime());
System.out.println("年:"+calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));//0-11
System.out.println("日期:"+calendar.get(Calendar.DATE));
System.out.println("小时:"+calendar.get(Calendar.HOUR));
System.out.println("分钟:"+calendar.get(Calendar.MINUTE));
System.out.println("秒:"+calendar.get(Calendar.SECOND));
Date date=calendar.getTime();
System.out.println("当前时间是:"+ sdf.format(date));
//对日期指定部分进行添加: 30 天: 2022-7-13 +30 : java代码比较麻烦
// calendar.add(Calendar.MONTH, 1);//月上加一个月
// date = calendar.getTime();
// System.out.println("加一个月后:"+ sdf.format(date));
System.out.println("添加30天");
calendar.add(Calendar.DATE,30);
date =calendar.getTime();
System.out.println("新的日期是:"+sdf.format(date));
calendar.add(Calendar.DATE, -10);
date =calendar.getTime();
System.out.println("新的日期是:"+sdf.format(date));
//判断闰年
GregorianCalendar gregorianCalendar=new GregorianCalendar();
System.out.println(gregorianCalendar.isLeapYear(2000));
}
}
关于格式化的操作:
System.out.println(2.0-1.1);
//以上代码输出不是0.9而是0.89999999999 ,默认是double
//如何输出0.9 ?
//1
System.out.println(2.0f-1.1f);
//2
System.out.println(BigDecimal.valueOf(2.00).subtract(BigDecimal.valueOf(1.10)));
//3
System.out.printf("%5.2f",2.0-1.1);
// User user=new User("tom", 22);
// System.out.println(user);
for(int i=1;i<=10;i++) {
System.out.println(UUID.randomUUID().toString());
}



